《数据结构-单链表操作验证.docx》由会员分享,可在线阅读,更多相关《数据结构-单链表操作验证.docx(13页珍藏版)》请在优知文库上搜索。
1、实验一单链表操作验证一、实验目的1 .理解数据结构中带头结点单链表的定义和逻辑图表示方法。2 .掌握单链表中结点结构的C+描述。3 .熟练掌握单链表的插入、删除和查询算法的设计与C+实现。4 .熟练掌握简单的演示菜单与人机交互设计方法。二、实验内容1 .编制一个演示单链表插入、删除、查找等操作的程序。三、实验步骤2 .需求分析本演示程序用VC+编写,完成单链表的生成,任意位置的插入、删除,以及确定某一元素在单链表中的位置。输入的形式和输入值的范围:插入元素时需要输入插入的位置和元素的值;删除元素时输入删除元素的位置;查找操作时需要输入元素的值。在所有输入中,元素的值都是整数。输出的形式:在所有
2、三种操作中都显示操作是否正确以及操作后单链表的内容。其中删除操作后显示删除的元素的值,查找操作后显示要查找元素的位置。程序所能到达的功能:完成单链表的生成(通过插入操作)、插入、删除、查找操作。测试数据:A.建立操作中依次输入1,2,3,4,5,生成个单链表B.插入操作中依次输入6,插入单链表C.查找操作中依次输入2,返回这,1个元素在单链表中的位D.删除操作中依次输入1,删除位于1的元素2 .概要设计D根本操作:操作结果:构造单链表Structstu*ins(structstu*head)初始条件:单链表已存在操作结果:插入元素Structstu*del(stiuctstu*head)初始条
3、件:单链表已存在操作结果:删除元素Voidfind(structstu*head)初始条件:单链表L已存在操作结果:查找元素Voidoutput(structstu*head)初始条件:单链表L已存在操作结果:输出元素Voidmain()主函数2)本程序包含6个函数:主函数main()显示单链表内容函数output()建立元素函数creat()插入元素函数ins()删除元素函数del()查找元素函数find。主函数控制五个函数:3 .详细设计对主程序和其他模块也都实现概要设计中定义的所有的数据类型,对每个操作给出伪码算法。需要写出伪码算法。1)结点类型和指针类型structstuintnum;
4、charname20floatChinese,maths,English;structstu*next;;2)单链表的根本操作Voidoutput(structstu*head)(伪码算法)Structstu*creat()(伪码算法)Structstu*ins(structstu*head)伪码算法)Structstu*del(structstu*head)(伪码算法)Voidfind(structstu*head)(伪码算法)Voidmain()(伪码算法)4 .程序源码#include4include#include#defineNULL0#defineLENsizeof(structs
5、tu)structstuintnum;charname20;floatChinese,maths,English;structstu*next;);intn;voidoutput(structstu*head)(structstu*p;p=head;PrintfC学号t姓名t语文t数学t英语tr);for(p=head;p!=NULL;p=p-next)(printf(*%dt%st%.lft%.lft%.lfn*,p-num,p-name,p-Chinese,p-maths,p-English);)structstu*creat()(structstu*head;structstu*pl,*
6、p2;n=0;PrintfC学号,姓名,语文,数学,英语:n);Printf(输入00000停止!r);pl=p2=(structstu*)malIoc(LEN);scanf(*%d%s%f%f%f*,fepl-num,pl-name,l-Chinese,Apl-maths,Apl-English);head=NULL;while(pl-num!=O)(n=n+l;if(n=l)head=pl;elsep2-next=pl;p2=pl;pl=(structstu*)malIoc(LEN);scanf(*%d%s%f%f%f*,&pl-num,pl-name,l-Chinese,&pl-math
7、s,Apl-English);)p2-next=NULL;return(head);)structstu*ins(structstu*head)(structstu*p,*pl,*p2;Printf(请输入插入的学生信息:n);pl=head;p=creat();if(head=NULL)head=p;pO-next=NULL;elsewhile(p-numpl-num)&(pl-next!=NULL)(p2=pl;pl=pl-next;)if(p-numnum)(if(head=pl)head=p;elsep2-next=p;p-next=pl;)else(pl-next=p;pO-next
8、=NULL;)n=n+l;return(head);structstu*del(structstu*head)intnum;if(head=NULL)(PrintfCn链表为空!r);)elsepl=head;Printf(请输入所需删除号码:r);scanf(*%d*,Anum);while(num!=pl-numftftpl-next!=NULL)(p2=pl;pl=pl-next;)if(num=pl-num)(if(pl=head)head=pl-next;elsep2-next=pl-next;Printf(删除:dr,num);n=n-l;elseprintf(对不起,%d不在链表
9、中!r,num);return(head);)voidfind(structstu*head)(structstu*pl;intnum;Printf(”请输入所需查找号码:n);SCanf(%d”,&num);if(head=NULL)(Printf(n链表为空!r);)elsepl=head;while(num!=pl-num&pl-next!=NULL)(pl=pl-next;)if(num=pl-num)(PrintfC学号:d姓名:s语文:%.If数学:%.If英语:%.lfn*,pl-num,pl-name,pl-Chinese,pl-maths,pl-English);)elsep
10、rintf(对不起,%d不在链表中!n”,num);voidmain()(structstu*head;intselect;while(l)(Printfn.建立2.插入3.删除4.查找5输出6.退出n*);Printfc请输入操作序号:r);scanf(%d,Aselect);switch(select)(case 1: head=creat();break;case 2: head=ins(head);break;case 3: head=del(head);break;case 4: find(head);break;case 5: output(head);break;case 6:
11、exit(0);)5 .调试分析在往电脑中输入程序时,由于马虎,有的落了标点符号,有的落了或写错了字母,有的语句也出现了错误,终于将它们一一修正过来。6 .使用说明程序名为LinkLiSt.cxe,运行环境为ViSUaIC+。程序执行后显示1.建立2.插入3.删除4.查找5.输出6.退出请输入操作序号:然后输入数字选择执行不同的功能。要求首先输入足够多的插入元素,才可以进行其他的操作。每执行一次功能,就会显示执行的结果(正确或错误以及执行后单链表的内容。选择1:显示“学号,姓名,语文,数学,英语:输入Ooooo停止!”要求输入足够多的元素。选择2:显示“请输入插入的学生信息:”要求输入要插入的位置和元素的值(都是整数)选择3:显示“请输入所需删除号码:”要求输入要删除元素的位置,执行成功后返回元素的值。选择4:显示“请输入所需查找号码:”要求输入要查找元素的值,执行成功后返回元素在表中的位置。选择5:显示“学号姓名语文数学英语”要求输出所有元素的值。选择6:显示Pressanykeytocontinue”要求按任意键继续操作或退出。7.测试结果