数据结构单链表操作实验报告.docx

上传人:b****6 文档编号:6746684 上传时间:2023-01-09 格式:DOCX 页数:9 大小:42.14KB
下载 相关 举报
数据结构单链表操作实验报告.docx_第1页
第1页 / 共9页
数据结构单链表操作实验报告.docx_第2页
第2页 / 共9页
数据结构单链表操作实验报告.docx_第3页
第3页 / 共9页
数据结构单链表操作实验报告.docx_第4页
第4页 / 共9页
数据结构单链表操作实验报告.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

数据结构单链表操作实验报告.docx

《数据结构单链表操作实验报告.docx》由会员分享,可在线阅读,更多相关《数据结构单链表操作实验报告.docx(9页珍藏版)》请在冰豆网上搜索。

数据结构单链表操作实验报告.docx

数据结构单链表操作实验报告

上机实验报告

课程名称:

数据结构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<date<<"";

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++中的模板这一块的知识掌握不到位,甚至可以

说很欠缺,所以在这一次的实验中,我没有采用类模板,而是直接运用了类的相关知识,我

想我接下来应该在课下好好补一补模板的相关知识。

七.源程序

#includeusingnamespacestd;

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<date<<"";

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();

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 总结汇报

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1