数据结构单链表操作实验报告.docx
- 文档编号:6746684
- 上传时间:2023-01-09
- 格式:DOCX
- 页数:9
- 大小:42.14KB
数据结构单链表操作实验报告.docx
《数据结构单链表操作实验报告.docx》由会员分享,可在线阅读,更多相关《数据结构单链表操作实验报告.docx(9页珍藏版)》请在冰豆网上搜索。
数据结构单链表操作实验报告
上机实验报告
课程名称:
数据结构A实验题目:
实验一单链表操作
专业班级:
学号:
姓名:
完成日期:
2017年10月11日成绩:
一.实验内容、目的和要求
1.实验内容
单链表的创建、合并和输出。
【扩展内容】以顺序表为存储结构实现类似的功能要求。
2.实验目的
1.熟悉用VisualC++进行程序设计的方法。
2.掌握单链表的创建、查找、插入和合并等运算
3.实验要求
本实验要求实现以下功能:
1.从键盘输入顺序任意的5个整数,按有序插入的要求生成第一个有序单链表,将该
链表输出显示。
2.再从键盘输入顺序任意的5个整数,按有序插入的要求生成第二个有序单链表,将该
链表输出显示。
3.将这两个有序单链表合并成一个有序单链表,要求使用两个单链表的原有空间进行合
并,将生成的有序单链表输出显示。
程序中使用的数据结构及符号说明
表示结点类
表示单链表类
表示构造函数
表示析构函数
表示排序函数
表示输入函数
表示输出函数
表示返回头结点
表示合并链表
classNode
classLinkList
LinkList();
~LinkList();
voidSort();
voidInput();
voidOutput();
Node*Gethead();
voidadd(LinkList&d);
主流程图
输入函数流程图
输出函数流程图
合并函数流程图
.程序主要模块的功能说明
1)输入函数voidInput();
Node*p=Gethead();
for(inti=1;i<=5;i++)
p->next=newNode;
p=p->next;
cin>>p->date;
cout< } 先将头节点赋值给p,然后进入for循环,依次执行定义一个新的节点,newNode将它 赋值给p结点指针指向的下一个结点p->next,再将p结点指针指向的下一个结点p->next 赋值给p结点。 然后依次输入,结点指针的数据。 进而实现了将需要输入的数据存储到单 链表中。 (2)输出函数voidOutput(); { cout<<"排序后的整数为"< Node*p=Gethead()->next; while(p! =NULL) { cout< p=p->next; } cout< } 将头结点指针指向的下一个结点赋值给p指针,进入while判断,当结点不为空的时候,cout 屏幕输出结点数据。 再将p指针指向的下一个结点赋值给p,直到退出while。 这个函数实 现了将数据输出到屏幕。 (3)排序函数voidSort(); { Node*p1=Gethead()->next; Node*p2=p1->next; ints=0; Node*p=p1; for(inti=1;i<=4;i++) { p=p1; p2=p1->next; for(intj=1;j<=5-i;j++) { if(p->date>p2->date) p=p2; p2=p2->next; } s=p1->date; p1->date=p->date; p->date=s; p1=p1->next; } 首先设置两个指针p1,p2,其中p1指向链表头结点的下一个结点,p2指向p1的下一个结 点。 设置一个指针p,将p1的地址赋给p,比较p指针和p2指针所指向的值,若指针P所 指向的值大于指针p2所指向的值,则调换两者的值;若小于则进行下一轮比较,直到所有 数据都比完为止。 这个函数实现了将输入的数据进行排序。 (4)合并函数voidadd(LinkList&d) { Node*p1=Gethead()->next; Node*p2=d.Gethead()->next; Node*p,*q; q=Gethead();while(p2! =NULL){ if((p1==NULL)||(p2->date)<=(p1->date)){ p=newNode; p->date=p2->date; p->next=p1;q->next=p;q=p; p2=p2->next; }else { p1=p1->next; q=q->next; } } } 要将两个单链表中的数据合并,并按顺序从小到大输出。 在原有链表的空间,将两个单链表 中的数据依次进行插入操作。 五.程序运行时的初值和运行结果 【测试数据】 输入第一组整数: 2345117834 输出的有序单链表应为: 11,23,34,45,78 输入第二组整数: 9013456610 输出的有序单链表应为: 10,13,45,66,90 合并两个单链表,输出合并后的结果应为: 10,11,13,23,34,45,45,66,78,90 六.收获及体会 在这次的数据结构实验中,我尝试进行了单链表的创建、查找、插入和合并等运算, 将课堂中,课本里面学到的相关知识进行了实践,但是毕竟纸上得来终觉浅,在实验过程中 发现了知识的漏洞,而且发现了自己对于C++中的模板这一块的知识掌握不到位,甚至可以 说很欠缺,所以在这一次的实验中,我没有采用类模板,而是直接运用了类的相关知识,我 想我接下来应该在课下好好补一补模板的相关知识。 七.源程序 #include classNode//定义结点类 {public: intdate; Node*next; Node(); ~Node(); };Node: : Node() {next=NULL; }Node: : ~Node() {} classLinkList//定义链表类 {public: LinkList();//构造函数 ~LinkList();//析构函数 voidInput();//输入函数 voidOutput();//输出函数 voidSort();//排序函数 Node*Gethead();//返回头结点 voidadd(LinkList&d);//合并链表 private: Node*head; }; LinkList: : ~LinkList() {} voidLinkList: : Input()//输入函数 { cout<<"请输入五个整数"< Node*p=Gethead(); for(inti=1;i<=5;i++){ p->next=newNode; p=p->next; cin>>p->date; Node*p=Gethead()->next;while(p! =NULL) { cout< p=p->next; } cout< } voidLinkList: : Sort()//排序函数 { Node*p1=Gethead()->next; Node*p2=p1->next; ints=0; Node*p=p1; for(inti=1;i<=4;i++){ p=p1; p2=p1->next; for(intj=1;j<=5-i;j++){ if(p->date>p2->date) p=p2; p2=p2->next; Node*LinkList: : Gethead() returnhead; } voidLinkList: : add(LinkList&d)//合并函数 { Node*p1=Gethead()->next; Node*p2=d.Gethead()->next; Node*p,*q; q=Gethead(); while(p2! =NULL){ if((p1==NULL)||(p2->date)<=(p1->date)){ p=newNode; p->date=p2->date; p->next=p1; q->next=p; q=p; p2=p2->next; }else{ p1=p1->next; q=q->next;}} } voidmain() { LinkLista,b; a.Input(); a.Output(); b.Input(); b.Output(); a.add(b); a.Output();
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 单链表 操作 实验 报告