数据结构线性表操作实验报告Word格式.docx

上传人:b****2 文档编号:15095870 上传时间:2022-10-27 格式:DOCX 页数:8 大小:29.70KB
下载 相关 举报
数据结构线性表操作实验报告Word格式.docx_第1页
第1页 / 共8页
数据结构线性表操作实验报告Word格式.docx_第2页
第2页 / 共8页
数据结构线性表操作实验报告Word格式.docx_第3页
第3页 / 共8页
数据结构线性表操作实验报告Word格式.docx_第4页
第4页 / 共8页
数据结构线性表操作实验报告Word格式.docx_第5页
第5页 / 共8页
点击查看更多>>
下载资源
资源描述

数据结构线性表操作实验报告Word格式.docx

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

数据结构线性表操作实验报告Word格式.docx

1,3,5,6,7,12

按从小到达合并为:

1,2,3,4,5,6,6,7,7,10,12;

按从大到小合并为:

12,10,7,7,6,6,5,4,3,2,1;

二、概要设计

1.基本操作

Linklistcreat()

操作结果:

构造一个链表,并输入数据,返回头节点指针。

voidprint(Linklisthead)

初始条件:

链表已存在;

将链表输出。

voidMergeList_1(LinklistLa,LinklistLb)

有序线性链表La和Lb已存在;

将La和Lb两个链表按从小到大的顺序合并。

voidMergeList_2(LinklistLa,LinklistLb)

将La和Lb两个链表按从大到小的顺序合并。

2.本程序包括四个模块:

(1)主程序模块;

(2)链表数据输入模块;

(3)链表合并模块;

(4)链表输出模块;

三、详细设计

1.元素类型,节点类型,指针类型

typedefstructLNode//定义节点

{

intdata;

structLNode*next;

}LNode,*Linklist;

2.每个模块的分析

(1)主函数模块

intmain()

Linklisthead1,head2;

inti;

printf("

请输入链表1数据(由小到大,输入0表示输入结束):

\n"

);

head1=creat();

//创建链表1,将头结点指针返回为head1

请输入链表2数据(由小到大,输入0表示输入结束):

head2=creat();

请选择排序方式(输入1则从小到达合并,输入其它整数则按从大到小合并):

"

scanf("

%d"

&

i);

//创建链表2,将头结点指针返回为head2

if(i==1)//选择两种排序方式,如果输入1,则合并后按从小到大输出;

输入其它数,合成链表按从大到小输出

{

printf("

按小到大将两表合并得:

MergeList1(head1,head2);

//将创建好的两表的头结点地址head1,head2作为函数参数

}

else

{printf("

按从大到小将两表合并得:

MergeList2(head1,head2);

return0;

}

(2)数据输入创建链表模块

Linklistcreat()//创建链表函数,并将创建链表的头结点指针返回

Linklisthead,p,s;

intz=1,x;

head=(LNode*)malloc(sizeof(LNode));

p=head;

while(z)

scanf("

x);

if(x!

=0)//输入0表示链表数据输入结束

{

s=(LNode*)malloc(sizeof(LNode));

s->

data=x;

p->

next=s;

next=NULL;

p=s;

}

else

z=0;

return(head);

(3)合并链表模块,两个函数分别表示两种排序方式,将链表合并后直接在函数中调用链表输出函数voidprint(Linklisthead)将链表输出

voidMergeList_1(LinklistLa,LinklistLb)

//已知链表La和Lb元素都按从小到大排列,将La和Lb合并成新链表,其中元素也按从小到大排列

Linklistpa,pb,pc,Lc;

pa=La->

next;

pb=Lb->

Lc=pc=La;

//把La的头节点作为新建链表Lc的头结点

while(pa&

&

pb)

if(pa->

data<

=pb->

data)

pc->

next=pa;

pc=pa;

pa=pa->

{

pc->

next=pb;

pc=pb;

pb=pb->

pc->

next=pa?

pa:

pb;

//插入剩余段

print(Lc);

//将链表Lc输出

voidMergeList_2(LinklistLa,LinklistLb)

//已知链表La和Lb的元素都按从小到大排列,合并La和Lb得到新链表,其中元素按照从大到小的顺序排列

Linklistpa,qa,pb,qb,Lc;

//设指针qa,qb,分别作为pa,pb的前驱的指针

pa=La->

pb=Lb->

Lc=La;

Lc->

while(pa&

pb)

if(pa->

data<

=pb->

qa=pa;

pa=pa->

qa->

next=Lc->

Lc->

next=qa;

else

qb=pb;

pb=pb->

qb->

next=qb;

while(pa)//如果pa不为空,则将La链的剩余段倒叙插入到头节点的后面

qa=pa;

pa=pa->

qa->

Lc->

while(pb)//如果pb不为空,则将Lb链的剩余段倒叙插入到头结点的后面

qb=pb;

pb=pb->

qb->

//将新合成的链表Lc输出

}

(4)链表输出模块,实现最终链表的输出

voidprint(Linklisthead)//链表输出函数,将链表输出

LNode*p;

p=head->

if(head!

=NULL)

do

printf("

%d"

p->

data);

p=p->

}while(p);

四、程序使用说明及测试结果

1.程序使用说明

(1)本程序的运行环境为VC6.0;

(2)进入演示程序后显示提示信息:

按要求输入数据

按要求输入数据

输入数据选择合并方式

2.测试结果

对链表1输入数据2,4,6,7,10,0

对链表2输入数据1,3,5,6,7,12,0

输入数据选择排序方式:

如果输入:

1输出结果为:

1,2,3,4,5,6,6,7,7,10,12

3(整数非1)输出结果为:

12,10,7,7,6,6,5,4,3,2,1

3.调试中遇到的错误分析

第一次运行时有问题,看以看出它的排序方式是对的,但是输出是多出前面一个很大的数,

可能是输出函数voidprint(Linklisthead)有问题,检查程序:

此处逻辑出错,直接将p指针指向head,然后就将p->

data输出,因此第一个数是头指针head所对应节点的值,所以可将p=head;

改为p=head->

这样p就指向第一个节点。

4.运行界面

五、实验总结

1.大部分的时间都用在了编程上,主要是因为C语言掌握的问题,C语言基础不好特别是对于C语言中链表的一些定义和基本操作不够熟练,导致在编程过程中还要不断的拿着c语言的教材查找,所以今后还要对C语言多练习,多动手,多思考。

2.数据结构有很强的逻辑性,因此我认为如果在上机之前先把逻辑搞清楚很重要,不管是对算法的设计还是对程序的调试都有很大帮助。

3.经过一次上机实践,我认为实践课很重要,上理论课只是纸上谈兵,只是被动地接受,而实践课上能将学过的知识利用起来,同时还有一些东西只能是自己上机实践才能慢慢探索出的。

教师评语:

实验成绩:

指导教师签名:

批阅日期:

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

当前位置:首页 > 求职职场 > 简历

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

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