2024年数据结构实验报告.doc

  1. 1、本文档共25页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

《数据构造》试验汇报一

试验内容:线性表

学号:??????????????姓名:??梁闪星

一、上机试验的问題和规定(需求分析)

2.线性表合并运算

?两个数据元素按值非递减有序排列的线性表,规定将两者归并為一种新表,新表中的数据元素仍按值非递减有序排列。规定分别采用次序和链式两种存储构造.。

二、程序设计的基本思想,原理和算法描述:

2.若采用次序存储构造,首先动态分派一种线性表Lc,并使pa,pb,pc分别指向La,Lb,Lc的基址,然后算出La,Lb的長度,在pa,pb所指元素都在La,Lb中時,把其中较小的一种插入到Lc中,并使指向较小元素的指针和pc分别加1。直到其中一种线性表中的元素所有插入到Lc中,把另一种线性表中的剩余元素也次序所有插入Lc中。

若采用链式存储构造,首先设置三个指针pa,pb,pc,其中pa,pb分别指向La表和Lb表中目前待比较插入的結点,而pc指向Lc中的目前最终一种結点,若pa-data=pb-data,则将pa所指結点链接到pc所指結点之后,否则将pb所指結点链接到pc所指結点之后。当一种為空時,阐明有一种表的元素已归并完,则只要将另一种表的剩余段链接在pc所指結点之后既可。

三、调试和运行程序过程中产生的问題及采用的措施:

调用函数時,参数传递錯误。通过一步一步调试根据提醒进行修改。

四、源程序及注释

#includestdio.h

#includestdlib.h

#defineINITSIZE100//线性表存储空间的初始分派量

#defineLISTINCREMENT10//线性表存储空间的分派增量

#defineOK1

#defineERROR0

#defineOVERFLOW-1

typedefintElemType;

typedefintStatus;

typedefstruct{

ElemType*elem;//存储空间基址

intlength;//目前長度

intlistsize;//目前分派的存储量(以sizeof(ElemType)為单位)

}SqList;

StatusInitList(SqListL)

{//构造一种空的次序表L.

L.elem=(ElemType*)malloc(100*sizeof(ElemType));

if(!L.elem)exit(OVERFLOW);

L.length=0;

L.listsize=INITSIZE;

return(OK);

}

voidAssign(SqListL)

{//為次序表L的各元素赋值。

inti,N;

printf(PleaseinputtheNumberoftheSqList:);

scanf(%d,N);

printf(Pleaseinputtheelements:);

for(i=0;iN;i++);{

scanf(%d,L.elem[i]);

L.length++;

}

}

voidMergeList(SqListLa,SqListLb,SqListLc){

//已知线性表La和Lb中的数据元素按值非递减排列

//归并La和Lb得到新的线性表Lc,Lc的数据元素也按值非递减排列

ElemType*pa,*pb,*pc,*pa_last,*pb_last;

pa=La.elem;

pb=Lb.elem;

Lc.listsize=Lc.length=La.length+Lb.length;

pc=Lc.elem=(ElemType*)malloc(Lc.listsize*sizeof(ElemType));

if(!Lc.elem)exit(OVERFLOW);//存储分派失败

pa_last=La.elem+La.length-1;

pb_last=Lb.elem+Lb.length-1;

while(pa=pa_lastpb=pb_last){//归并

if(*pa=*pb)*pc++=*pa++;

else*pc++=*pb++;

}

while(pa=pa_last)*pc++=*pa++;//插入La的剩余元素

while(pb=pb_last)*pc++=*pb++;//插入Lb的剩余元素

}//MergeList_Sq

voidListTraverse(SqListL){

//遍历次序表L

inti;

for(i=0;i=L.length-1;i++);

printf(%d,L.elem[i]);

文档评论(0)

159****1748 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档