福师大计算机系数据结构实验二Word格式文档下载.docx
- 文档编号:19864627
- 上传时间:2023-01-11
- 格式:DOCX
- 页数:19
- 大小:125.08KB
福师大计算机系数据结构实验二Word格式文档下载.docx
《福师大计算机系数据结构实验二Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《福师大计算机系数据结构实验二Word格式文档下载.docx(19页珍藏版)》请在冰豆网上搜索。
5.1设计实现
//以头文件"
public.h"
声明程序参数
#pragmaonce
#pragmaregion声明
#include<
stdio.h>
stdlib.h>
string>
#include<
iostream>
usingnamespacestd;
#defineTRUE1
#defineFALSE0
#defineOK1
#defineERROR0
#defineINFEASIBLE-1
#defineOVERFLOW-2
typedefintStatus;
#pragmaendregion
LinkList.h"
定义链表结构
#include"
#pragmaregion定义
#pragmaregion数据节点的定义
template<
typenameELEMENT_TYPE>
structLinkNode{
ELEMENT_TYPEdata;
structLinkNode*next;
};
#pragmaregion线性表头结点的定义
structLinkList{
LinkNode<
ELEMENT_TYPE>
*head;
intlength;
DefinitionForStudent.h"
定义学生结点结构
../LinkList/LinkList.h"
#pragmaregion学生结构体定义
typedefstructStudentNode_type{
longno;
//学号
charname[21];
//姓名
charsex;
//性别;
0表示女生;
1表示男生;
charDormitory[9];
//宿舍
longphone;
//联系方式
longQQ;
floatscore;
//成绩
}StudentNode;
typedefLinkNode<
StudentNode>
s2;
typedefLinkList<
student;
charFileName[]="
stu.dat"
;
5.2操作实现
5.2.1线性链表的操作
//"
#pragmaregion操作
#pragmaregion插入
typenameELEMENT_TYPE>
StatusListInsert(LinkList<
&
L,inti,ELEMENT_TYPEe){
if(i>
L.length+1||i<
0){
returnFALSE;
}
*p;
p=newLinkNode<
if(p==NULL){
p->
next=NULL;
data=e;
if(i==1){
p->
next=L.head;
L.head=p;
else{
LinkNode<
*q=L.head;
for(intk=1;
k<
i-1;
k++){
q=q->
next;
}
next=q->
q->
next=p;
L.length++;
returnOK;
}//ListInsert
StatusInsertFirst(LinkList<
L,ELEMENT_TYPEe){
returnListInsert(L,1,e);
}//InsFirst
StatusInsertLast(LinkList<
returnListInsert(L,L.length+1,e);
}//InsertLast
#pragmaregion删除
StatusListDelete(LinkList<
L,inti,ELEMENT_TYPE&
e){
if(i<
1||i>
L.length){
returnERROR;
}
p=L.head;
L.head=p->
e=p->
data;
*p=L.head;
for(intk=0;
k++){
p=p->
*q=p->
deleteq;
}//ListDelete
#pragmaregion查找与待处理元素相等的节点位置,不存在返回0
StatusLocateElem(LinkList<
L,ELEMENT_TYPEe,bool(*compare(ELEMENT_TYPE,ELEMENT_TYPE))){
intk=1;
while(p!
=NULL){
if((*compare)(p->
data,e)){
returnk;
}
else{
k++;
return0;
}
#pragmaregion查找
template<
StatusGetElem(LinkList<
for(intk=1;
i;
p=p->
e=p->
#pragmaregion修改
StatusListModify(LinkList<
L,inti,ELEMENT_TYPEe1,ELEMENT_TYPEe2){
ListDelete(L,i,e1);
ListInsert(L,i,e2);
#pragmaregion线性表的初始化操作
StatusInitList(LinkList<
L){
L.head=NULL;
L.length=0;
}//InitList
#pragmaregion线性表的释放、清空
StatusClearList(LinkList<
L){
while(p!
deletep;
}//ClearList
#pragmaregion获取长度
StatusListLength(LinkList<
returnL.length;
5.2.2学生结点的操作
#pragmaregion输入学生
StatusInputStudent(studentstu,StudentNode&
s){
cin>
>
s.no>
s.name>
s.sex>
s.Dormitory>
s.phone>
s.QQ>
s.score;
InsertFirst(stu,s);
#pragmaregion把学生保存到文件
StatusSaveToFile(LinkList<
L){
StudentNodes;
FILE*file;
fopen_s(&
file,FileName,"
w"
);
if(file==NULL){
cout<
<
"
Can'
topenfile..."
endl;
fwrite(&
L.length,sizeof(int),1,file);
for(intk=0;
L.length;
k++){
GetElem(L,k+1,s);
if(fwrite(&
s,sizeof(structStudentNode_type),1,file)!
=1){
cout<
Filewriteerror!
fclose(file);
fclose(file);
#pragmaregion从文件中读取学生
StatusReadFromFile(LinkList<
r"
Cannotopenfile..."
fread(&
length,sizeof(int),1,file);
length;
k++){
if(fread(&
if(feof(file)){
fclose(file);
returnOK;
}
Filereaderror!
returnERROR;
ListInsert(L,k+1,s);
#pragmaregion获取某一学生信息
StatusGetStudent(LinkList<
L,intk,StudentNode&
s){
GetElem(L,k,s);
#pragmaregion显示学生信息
Statusdisplay(LinkList<
L,StudentNode&
intk;
k;
if(GetStudent(L,k,s)==ERROR){
学生人数应大于0小于"
ListLength(L)<
。
endl<
cout<
s.no
<
姓名:
s.name
性别:
s.sex
宿舍:
s.Dormitory
联系方式:
s.phone
QQ:
s.QQ
成绩:
s.score<
#pragmaregion学生的初始化操作
StatusCreateStudent(student&
s){
InitList(s);
}//CreateStudent
#pragmaregion判断是否为同一学生
boolcompare(constStudentNode&
s1,constStudentNode&
s2){
return(s1.no==s2.no)&
&
(strcmp(s1.name,s2.name))?
TRUE:
FALSE;
}//compare
#pragmaregion删除某一学生信息
StatusDeleteStudent(LinkList<
if(ListDelete(L,k,s)==ERROR){
学生人数应大于0且小于等于"
#pragmaregion清除所有
StatusClearAll(LinkList<
ClearList(L);
5.2.3程序实现的操作
design.h"
定义程序实现操作
StatusTitle(){
\"
实验报告二\"
学生信息管理线性链表实现\"
[版本1.0.1.1]"
endl
版权所有(c)2012Corporation。
保留所有权利。
StatusHelpMenu(){
有关某个命令的详细信息,请键入help命令名"
input输入学生的信息"
get获取一个学生信息"
print打印学生信息"
save保存到文件"
read从文件读取"
delete删除一个学生"
clear删除所有"
exit退出"
有关命令的详细信息,请参阅帮助文档。
StatusHelpInput(){
输入学生的信息。
inputnonamesexDormitoryphoneQQscore"
no学号(longint型)。
name姓名(char[21]型)。
sex性别(char型,0表示女生;
1表示男生)。
Dormitory宿舍(char[9]型)。
phone联系电话(longint型)。
QQQQ号(longint型)。
score分数成绩(float型)。
输入参数之间请用空格或换行隔开..."
Pleaseinputseparatedwithblankspace..."
StatusHelpGet(){
StatusHelpPrint(){
StatusHelpSave(){
StatusHelpRead(){
StatusHelpDelete(){
删除一个学生。
deletek"
k学生链表中第k位置的学生。
输入参数之间请用换行隔开..."
PleaseinputseparatedwithNewline..."
StatusHelpExit(){
退出TextForLinkListOfStudent.exe程序(命令解释器)。
Statuschange(charcommand[]){
if(strcmp(command,"
input"
)==0){
return11;
elseif(strcmp(command,"
helpinput"
)==0||strcmp(command,"
input/?
return111;
get"
return12;
helpget"
get/?
return121;
print"
return13;
helpprint"
print/?
return131;
save"
return14;
helpsave"
save/?
return141;
read"
return15;
helpread"
read/?
return151;
delete"
return16;
elseif(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 师大 计算机系 数据结构 实验