[2017年整理](数据结构单链表)

上传人:豆浆 文档编号:909420 上传时间:2017-05-21 格式:DOC 页数:9 大小:117KB
返回 下载 相关 举报
[2017年整理](数据结构单链表)_第1页
第1页 / 共9页
[2017年整理](数据结构单链表)_第2页
第2页 / 共9页
[2017年整理](数据结构单链表)_第3页
第3页 / 共9页
[2017年整理](数据结构单链表)_第4页
第4页 / 共9页
[2017年整理](数据结构单链表)_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《[2017年整理](数据结构单链表)》由会员分享,可在线阅读,更多相关《[2017年整理](数据结构单链表)(9页珍藏版)》请在金锄头文库上搜索。

1、实验项目中文名称:单链表实验项目英文名称:Single linked list实验项目编码:111101实验学时:4 适用专业:信息与计算科学、数学与应用数学所属课程:数据结构开课学院:理学院开课学期:第 5 学期教材及实验指导书:耿国华主编, 数据结构(第三版) ,电子工业出版社,2011 年、 实验目的或任务通过指导学生上机实践,对常用数据结构的基本概念及其不同的实现方法的理论得到进一步的掌握,并对在不同存储结构上实现不同的运算方式和技巧有所体会。、 实验教学基本要求1.了解实验目的及实验原理;2.编写程序,并附上程序代码和结果图;3.总结在编程过程中遇到的问题、解决办法和收获。、 实验教

2、学的内容或要求1.编写函数,实现随机产生或键盘输入一组元素,建立一个带头结点的单链表(无序)2.编写函数,实现遍历单链表3.编写函数,实现把单向链表中元素逆置4.编写函数,建立一个非递减有序单链表5.编写函数,利用以上算法,建立两个非递减有序单链表,然后合并成一个非递减链表。6.编写函数,在非递减有序单链表中插入一个元素使链表仍然有序7.编写函数,实现在非递减有序链表中删除值为 x 的结点8.编写一个主函数,在主函数中设计一个简单的菜单,分别调试上述算法、 实验类型或性质验证性 、 实验开出要求必做、 实验所需仪器设备1.计算机2.相关软件(如 C,C+,PASCAL,VC,DELPHI 等等

3、)、 实验所用材料计算机耗材、 实验结果:实验结果:1.单链表实验主界面菜单:图 1 主菜单界面2.随机产生或键盘输入一组元素,建立一个带头结点的单链表(无序) ,并遍历单链表图 2 建立无序单链表并遍历输出3.把单向链表中元素逆置图 3 将建立的单链表逆置输出4.建立一个非递减有序单链表,可无序输入图 4 建立一个非递减的单链表5.建立两个非递减有序单链表,然后合并成一个非递减链表图 5 合并链表6.在非递减有序单链表中插入一个元素使链表仍然有序图 6 在单链表中插入元素7.在非递减有序链表中删除值为 x 的结点图 7 删除链表中的指定元素实验小结通过本次实验,我了解了单链表的存储结构形式,

4、存储地址可无序,我还掌握链表的使用方法,单链表的每个结点的存储地址存放在其前驱结点的指针域中,表中的第一个结点无前驱,所以应设一个头指针 head 指向第一个结点,表的最后一个结点没有直接后继,故指定单链表的最后一个结点的指针域为“null”。 程序附录:#include #include typedef int ElemType; typedef struct LNode ElemType data; struct LNode *next; LNode,*Linklist; void CreateList(Linklist &L) Linklist p,s; ElemType x; L=(L

5、inklist)malloc(sizeof(LNode); L-next=NULL; p=L; scanf(%d,&x); while(x) s=(Linklist)malloc(sizeof(LNode); s-data=x; s-next=NULL; p-next=s; p=s; scanf(%d,&x); void printlist(Linklist &L) Linklist p; p=L; while(p-next!=NULL) p=p-next; printf(%d ,p-data); printf(n); void backward(Linklist &L) Linklist p

6、,s; p=L-next; L-next=NULL; while(p) s=p; p=p-next; s-next=L-next; L-next=s; void Insert(Linklist &L,ElemType x)Linklist p,s; s=(Linklist)malloc(sizeof(LNode); s-data=x; p=L; while(p-next&p-next-datanext; s-next=p-next; p-next=s; void Create_Sort(Linklist &L) ElemType x; L=(Linklist)malloc(sizeof(LNo

7、de); L-next=NULL; printf(建立有序表,输入数据以 0 结束:n); scanf(%d,&x); while(x) Insert(L,x); scanf(%d,&x); void Merge_List(Linklist La,Linklist Lb,Linklist &Lc) Linklist p,q,s,rear; p=La-next; q=Lb-next; Lc=rear=La; free(Lb); while(p&q) if(p-datadata) s=p;p=p-next; else s=q;q=q-next; rear-next=s; rear=rear-nex

8、t; if(p) rear-next=p;else rear-next=q; void Delete(Linklist &L,ElemType x)Linklist p,q; p=L; q=L-next; while(q&q-data!=x) p=q; q=q-next; if(!q) printf(nnot deleted); else p-next=q-next;free(q); void main() Linklist La,Lb,Lc; ElemType x; int n;printf( 数据库实验-链表nn); printf(1.输入一组随机的元素,建立单链表,以 0 结束n); p

9、rintf(2.遍历单链表n); printf(3.链表元素逆置n); printf(4.建立一个非递减有序单链表n); printf(5.合并两个个非递减单链表n); printf(6.在非递减有序单链表中插入一个元素n); printf(7.删除指定的元素n); while(1) printf(请选择 :); scanf(%d,&n); switch(n) case 1:printf(键盘输入,建立一个带头结点的单链表:n);CreateList(La);break; case 2:printf(遍历单链表:n);printlist(La);break; case 3:printf(把单向

10、链表中元素逆置:n);backward(La); printlist(La);break; case 4:printf(建立一个非递减有序单链表:n);Create_Sort(La); printlist(La);break; case 5:printf(建立两个非递减有序单链表,并将其合并:n);Create_Sort(La); Create_Sort(Lb); Merge_List(La,Lb,Lc); printlist(Lc);break; case 6:printf(在非递减有序单链表中插入一个元素使链表仍然有序:n);Create_Sort(La); printlist(La);printf(请输入要插入的元素 x:); scanf(%d,&x); Insert(La,x); printlist(La);break; case 7:printf(在非递减有序链表中删除值为 x 的结点:n); Creat_Sort(La); printlist(La); printf(请输入要删除的元素 x:); scanf(%d,&x); Delete(La,x); printlist(La);break; default :printf(输入有误,请重新选择!n);

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号