福师大计算机系数据结构实验二Word格式文档下载.docx

上传人:b****5 文档编号:19864627 上传时间:2023-01-11 格式:DOCX 页数:19 大小:125.08KB
下载 相关 举报
福师大计算机系数据结构实验二Word格式文档下载.docx_第1页
第1页 / 共19页
福师大计算机系数据结构实验二Word格式文档下载.docx_第2页
第2页 / 共19页
福师大计算机系数据结构实验二Word格式文档下载.docx_第3页
第3页 / 共19页
福师大计算机系数据结构实验二Word格式文档下载.docx_第4页
第4页 / 共19页
福师大计算机系数据结构实验二Word格式文档下载.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

福师大计算机系数据结构实验二Word格式文档下载.docx

《福师大计算机系数据结构实验二Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《福师大计算机系数据结构实验二Word格式文档下载.docx(19页珍藏版)》请在冰豆网上搜索。

福师大计算机系数据结构实验二Word格式文档下载.docx

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;

//QQ

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(

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 小学作文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1