还剩5页未读,继续阅读
文本内容:
《数据结构》实验报告实验
一、顺序表的应用专业电子商务班级102班学号 10106020209学生姓名王立新指导老师米晓红河南科技大学管理学院2011年10月23日一.实验目的熟练掌握线性表链式存储结构的建立方法及基本操作算法,并根据实际问题的要求,灵活运用二.实验内容本次实验要求以班级学生信息作为管理对象,根据实验一建立班级学生信息线性表的链式存储结构,并练习使用单链表的基本操作算法,实现对班级学生信息的管理,包括学生信息的插入、学生信息的删除、学生信息的查询和学生信息线性表的输出三.完成情况依照实验内容编写的程序代码#includestdio.h#includestring.h#includemalloc.htypedefstructstudent{charnum
[8];/*学号*/charname
[9];/*姓名*/chargender
[3];/*性别*/intscore;/*成绩*/structstudent*next;intlength;}LinkList;LinkList*L;intmenu_select{intsn;printf\n学生信息管理系统\n;printf=\n;printf
1.学生信息线性表的建立\n;printf
2.插入学生信息\n;printf
3.查询学生信息\n;printf
4.删除学生信息\n;printf
5.输出所有学生信息\n;printf
0.退出管理系统\n;printf===\n;printf请选择0-5:\n;for;;{scanf%dsn;ifsn0||sn5printf\n\t输入错误,重选0-5\n;elsebreak;}returnsn;}voidcreateListLinkList*L{LinkList*p;LinkList*q;intin;q=LinkList*mallocsizeofstructstudent;printf有几位学生?请输入\n;fflushstdin;scanf%dn;printf以下请输入这%d位学生的信息\nn;q=L;fori=0;in;p=LinkList*mallocsizeofstructstudent;printf第%d位学生i;printf\n学号
(8)姓名
(8)性别成绩\n;fflushstdin;scanf%s%s%s%dp-nump-namep-genderp-score;q-next=p;q=p;}q-next=NULL;}voidprintListLinkList*L{inti=1;LinkList*p;p=LinkList*mallocsizeofstructstudent;printf\n学号
(8)姓名
(8)性别成绩\n;printf-----------\n;p=L-next;ifp!=NULLdo{printf第%d位学生i;printf%s%s%s%d\np-nump-namep-genderp-score;printf----------\n;p=p-next;i++;}whilep;}intinsertLinkList*LLinkList*sintk{intj=0;LinkList*p=L;whilepjk-1{p=p-next;++j;}s-next=p-next;p-next=s;}intfindListLinkList*L{LinkList*P=L-next;charnum
[8];charname
[9];inti=0xz;printf\n;printf
1、按学号查询\n;printf
2、按姓名查询\n;printf======\n;printf请选择;fflushstdin;scanf%dxz;ifxz==1{printf请输入要查找学生的学号;scanf%snum;whileP!=NULLstrcmpP-numnum!=0{P=P-next;}ifP==NULL{printf没有您要查询的学生信息!;returnNULL;}elsereturnP;}elseifxz==2{printf请输入要查找学生的姓名;scanf%sname;whileP!=NULLstrcmpP-namename!=0{P=P-next;}ifP==NULL{printf没有您要查询的学生信息!;returnNULL;}elsereturnP;}}voiddelNodeLinkList*L{intij;LinkList*p*q*p1;p1=LinkList*mallocsizeofstructstudent;printf请先查找您要删除的学生信息\n;p1=findListL;ifp1==NULL{printf没有查到要删除的学生信息;}whileL-next!=p1{L=L-next;}L-next=p1-next;printf该学生信息已被删除!\n;}voidmain{LinkList*L*p*s*P;intik;while1{switchmenu_select{case1:printf**************************************\n;printf学生信息线性表的建立\n;printf***************************************\n;L=LinkList*mallocsizeofstructstudent;createListL;break;case2:printf**************************************\n;printf添加学生信息\n;printf请输入要添加的学生信息\n;printf\n学号
(8)姓名
(8)性别成绩\n;printf**************************************\n;s=LinkList*mallocsizeofstructstudent;fflushstdin;scanf%s%s%s%ds-nums-names-genders-score;printf请输入要插入的位置\n;fflushstdin;scanf%dk;insertLsk;break;case3:printf**************************************\n;printf查询学生信息\n;printf*****************\n;p=findListL;ifp!=NULL{printf您要查的学生为\n学号
(8)姓名
(8)性别成绩\n;printf--------------\n;printf%s%s%s%d\np-nump-namep-genderp-score;printf--\n;}elseprintf没有您要查询的学生信息!;break;case4:printf**************************************\n;printf删除学生信息\n;printf**************************************\n;delNodeL;break;case5:printf**************************************\n;printf输出所有学生信息\n;printf**************\n;printListL;break;case0:printf再见!\n;getchar;return;}}}四.实验结果
1.学生信息表的建立
2.插入学生信息
3.查询学生信息
4.删除学生信息
5.输出所有学生信息
6.退出管理系统五.问题与解决
1.学生信息表不能正确的建立,学生信息不能正确的插入,而插入的是乱码?未正确的定义指针变量,或是定义了变量但没有申请动态存储空间这就不能插入学生信息或插入的是乱码
2.不能正确的删除学生信息,删除是指定位置的下一个学生信息?程序中循环使用了while使循环多了一次,造成删除下一学生信息的情况发生
3.错误提示某一个变量未指向结构体变量?原因是定义的变量在申请动态存储空间时,没有指向结构体变量六.实验总结实验体会线性表的链式存储结构是用一组任意的存储单元存储线性表的数据元素的每个结点包括两个域其中存储数据元素信息的域为数据域;存储直接后继的域为指针域程序中若是需要有返回值时,被调用的函数一定要有return语句,把相应的信息返回到主函数中也可以通过定义一个外部全局变量解决指针变量在定义时类型要一致,且要有动态申请存储空间的语句,并指向结构体中定义变量在使用while循环时,没有正确的理解该函数判断结束的条件,及结束后的情况,使信息在输出时多向下输出了一次,造成输出信息错误对这个问题可以利用do-while循环解决多一次循环的弊端试验收获通过本次上机试验,独立对学生信息管理系统程序进行了编译在编译过程中发现了很多的问题,也也遇到了不少的困难在解决这些困难的过程中,查询了不少的相关知识,进一步加深了对链式存储结构的理解,对以后更加深入的学习奠定了基础只有不断的实际操作,发现问题,解决问题,才能真正的提高实战能力实验成绩评价项目评分等级独立完成完整的实验内容,结果完全正确,报告内容完整,排版整洁美观,能真实体现实际操作过程及遇到的问题A完成实验,实验内容较为完整,结果正确,报告内容较为完整,排版较为整洁美观,能体现实际操作过程及遇到的问题B基本完成实验,结果正确,报告内容欠缺,排版较为整洁美观,能体现实际操作过程及遇到的问题C不能独立完成完整的实验内容,结果不真实,报告内容欠缺,排版欠整洁美观,不能体现实际操作过程及遇到的问题D。