《单链表操作验证实验报告.docx》由会员分享,可在线阅读,更多相关《单链表操作验证实验报告.docx(9页珍藏版)》请在第一文库网上搜索。
1、实验报告实验名称单链表操作验证实验一单链表操作验证一.实验目的(1)掌握线性表的链接存储结构;验证单链表及其基本操作的实现;进一步掌握数据结构及算法的程序实现的基本方法。二,实验内容用头插法(或尾插法)建立带头结点的单链表;对已建立的单链表实现插人、删除、查找等基本操作。三.实验步骤1 .需求分析本演示程序用VC+编写,完成单链表的生成,任意位置的插入、删除,以及确定某一元素在单链表中的位置。输入的形式和输入值的范围:插入元素时需要输入插入的位置和元素的值;删除元素时输入删除元素的位置;查找操作时需要输入元索的值。在所有输入中,元素的值都是整数。输出的形式:在所有三种操作中都显示操作是否正确以
2、及操作后单链表的内容。其中删除操作后显示删除的元素的值,查找操作后显示要查找元素的位置。程序所能达到的功能:完成单链表的生成(通过插入操作)、插入、删除、查找操作。测试数据:(1)生成单链表123234345456(2)查找1位置为23(3)删除数据2(4)插入267(5)输出数据I232673454562 .源程序如下:#inc1ude#inc1ude#inc1ude#inc1ude#def1neNU11Ostructdata(intnum;intd;structdata*next;);structdata*head,*p,*tai1;int1en,i;structdata*creat()(
3、intn;1en=sizeof(structdata);PriIItfneii=);scanf(,%d,n);Printfr输入创建单链表:n”);head=(structdata*)ma11oc(1en);Printf(数据位置和数据八n”);SCanf(%d%d,&head-num,&head-d);tai1=head;for(i=2;inum,&p-d);tai1-next=p;tai1=p;tai1-next=NU11;return(head);)voidoutput(structdata*head)intj;structdata*p,*p1;p=head;for(j=0;j1en;j
4、+)(for(i=0;inext;if(p-nump-num)p1=p;p=pO;pO=p1;for(p=head;p!=NU11;p=p-next)printf(,%d:%dn,p-nun,p-d);structdata*ins(structdata*head)structdata*p,*p1,*p2;structdata*ins;Prii1tfr输入插入的位置和数据:);ins=(structdata*)ma11oc(1en);scanf(,%d%dins-numins-d);p1=head;p=ins;if(head=NU11)head=pO;pO-next=NU11;e1se(whi1
5、e(pO-nump1-num)&(p1-next!=NU11)p2=p1;p1=p1-next;)if(p-nunnum)(if(head=p1)head=p;p-next=p1;)e1sep1-next=pO;pO-next=NU11;for(p=head;p!=NU11;p=p-next)printf(,%d:%dnn,p-num,p-d);return(head);)structdata*de1(structdata*head)(structdata*p1,*p2;intnum;Printf(输入删除位置:);scanf(,%d,Anum);if(head=NU11)printf(链表空
6、!n”);gotoend;p1=head;whi1e(p1-num!=num&p1-next!=NU11)p2=p11=p1-ncxt;)if(p1-num=num)if(p1=hcad)head=p1-next;e1sep2-next=p1-next;e1sePri1Itf(没有发现d!n”,num);for(p=head;p!=NU11;p=p-next)printf(*%d:%dn*,p-num,p-d);cn(i:return(hcad);voidfind(structdata*head)structdata*p1;intnum;Printfr输入查找位置:);scanfC,%d,nu
7、m);if(head=N11)printf(链表空!n);gotoend;p1=head;whi1e(p1-num!=num&p1-next!=NU11)p1=p1-next;)if(p1-num=num)(Prii1tfr这数据信息n”);printf(,%d:%dn,p1-nun,p1-d);)e1seprintf(,*%d没有发现!n”,num);end:;voidmain()structdata*head;intse1ect;head=NU11;whi1e(1)(Printf(”I:创建2:插入3:删除4渣找5:输出6:退出n);printf(*p1easeinputse1ect:*)
8、;scanf(,%d,sc1ect);Switch(Se1ect)case1hcad=创建(“break;case2:head=插入(head);break;case3:head=删除(head);break;case4:查找d(head);break;case5:输出(hcad);brcak;case6:退出(0);)3.使用说明:创建2: 插入3: 删除4: 查找5: 输出6: 退出Se1ect:在SeIeCt后输入数字选择执行不同的功能。要求首先输入足够多的插入元素,才可以进行其他的操作。每执行一次功能,就会显示执行的结果(正确或错误)以及执行后单链表的内容。选择1.创建一个单链表。选择
9、2.选择插入的位置和和数据。选择3.输入要删除的位置,程序将删除该位置的数据。选择4.输入查找到位置,程序将显示该位置的数据。选择5.程序将自动输出经过变化后的单链表。选择6.退出程序。4.测试结果截图:XDocuMentsandSettingSAdinDebug试验.exeH2:插入3:删除4:查找5:输出6:推出e5输th1tenumberanddata:63892:插入3:删除4:查找5:输出6:推出插入3:删除4:查找5:输出6:推出:32:插入3:删除4:查找5:播出6:推出据:2入位置和插入数据:2783:删除4:查找5:输出6:推出四、实验总结(结果分析和体会)1 .我又进一步巩固了C语言的基础,尤其是指针那部分;2 .通过实验加深了对线性表的操作方面知识的认识。更深层次了解了单链表的操作特点及优缺点;3 .通过实验达到了理论与实践结合的目的,提高了自己的编程能力;4 .通过实验是我进一步对单链表进行了复习与巩固。这是在实践中对自我能力的提高。.程序可能不够完善需要在学习过程中不断去完善,这需要平时的努力。