付费下载
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
数据结构实验报告
实验一线性表的顺序表示和实现
实验人:学号:Xb09620125时间:2011.03.09
一、实验目的
1,掌握线性表的动态分配顺序存储结构
2.掌握线性表合并算法。
二、实验内容
已知顺序线性表La和Lb的元素按值非递减排列,归并La和Lb得到新的
顺序线性表Lc,Lc的元素也按值非递减排列。(算法2.7)
三、实验步骤:
1.创建线性表La和Lbo
2.合并La和Lb得到Lc。
3.输出La、Lb、LCo
四、算法说明
先建立线性表La与Lb,然后合并两线性表。
五、测试结果
六、分析与探讨
合并两线性表时,数据元素按非递减排列。
七、附录:源代码
源代码列在附录中,要求程序风格清晰易理解,有充分的注释。有意义的注释行不少于30%.
#defineTRUE1
#defineFALSE0
#defineOK1
#defineERROR0
#defineINFEASIBLE-2
1
数据结构实验报告
#defineOVERFLOW-2
//Status是函数的类型,其值是函数结果状态代码
typedefintStatus;
typedefintElemType;〃元素类型定义为整型
#include<iostream.h>
#defineLISTJNIT_SIZE100〃存储空间的初始分配量
#defineLISTINCREMENT10〃存储空间的分配增量
typedefstruct{
ElemType*elem;〃指向存储空间的基地址
intlength;〃线性表的当前长度
intlistsize;〃当前分配的存储容量
JSqList;
StatusInitList_Sq(SqList&L){//算法2.3
//构造一个空的线性表Lo
L.elem=new(ElemType[LIST_INIT_SIZE*sizeof(ElemType)]);
if(IL.elem)returnOVERFLOW;//存储分配失败
L.length=0;//空表长度为0
L.listsize=LISTJNIT_SIZE;//初始存储容量
returnOK;
}//InitList_Sq
StatusDestroyList_Sq(SqList&L){
if(L.elem)delete(L.elem);〃释放线性表的存储空间
L.elem=NULL;
returnOK;
}//DestroyList_Sq
ElemType*realloc(SqListL){〃再申请LISTINCREMENT个空间
ElemType*p,*q,*r;
p=new(ElemType[(L.listsize+LISTINCREMENT)*sizeof(ElemType)]);
if(!p)returnNULL;q=p;r=L.elem;
for(inti=1;i<=L.length;i++){*q=*r;q++;r++;}
deleteL.elem;
returnp;
}
StatusListInsert_Sq(SqList&L,inti,ElemTypee){//算法2.4
//在顺序线性表L的第i个元素之前插入新的元素e,
〃i的合法值为l〈WListLength_Sq(L)+l
ElemType*p;
if(i<111i>L.length+l)returnERROR;//i值不合法
if(L.length>=L.listsize){//当前存储空间已满,增加容量
ElemType*newbase=realloc(L);
if(!newbase)returnERROR;//存储分配失败
L.elem=newbase;//新基址
L.listsize+=LISTINCREMENT;//增加存储容量
2
数据结构实验报告
ElemType*q=&(L.elem[i-1]);//q为插入位置
for(p=&(L.elem[L.length-1]);p>=q;—p)*(p+l)=*p;
//插入位置及之后的元素右移
*q=e;//插入e
++L.length;//表'1011
returnOK;
}//ListInsert_Sq
StatusListInsert(SqList&L,ElemType
e){if(!L.length)L.elem[0]=e;
inti=L.length;
while(e<=L.elem[i-l]&&i>0){
L.elem[i]=L.elem[i-1];
I
)
L.elem[i]=e;
L.length++;
returnOK;
)
StatusMergeList_Sq(SqListLa,SqListLb,SqList&Lc){//算法2.7
II已知顺序线性表La和Lb的元素按值非递减排列。
//归并La和Lb得到新的顺序线性表Lc,Lc的元素也按值非递减排列。
ElemType*pa,*pb,*pc,*pa_last,*pb_last;
〃使pa、pb分别指向La和Lb的第一个元素
pa=La.elem;pb=Lb.elem;
〃为Lc申请空间
Lc.listsize=Lc.length=La.length+Lb.length;
pc=Lc.elem=new(ElemType[Lc.listsize*sizeof(ElemType)]);
if(!Lc.elem)
returnOVERFLOW;//存储分配失败
〃使pa」ast、pbjast分别指向La和Lb的最后一个元素
pa_last=La.elem+La.length-1;
pbjast=Lb.elem+Lb.length-1;
while(pa<=pa」ast&&pb<=pbjast){〃归并
if(*pa<=*pb){*pc++=*pa++;}
else*pc++=*pb++;
}
while(pa<=pa_last)*pc++=*pa++;//插入La的剩余元素
while(pb<=pbjast)*pc++=*pb++;//插入Lb的乘U余元素
return(OK);l;
}//MergeList
voidListTraverse_Sq(SqListL)
{inti;
for(i=1;i<=L.length;i++)cout<vLelem"[]<<"";
cout<<endl;
3
数据结构实验报告
voidmain()
{inti;
〃建立两个元素按值非递减排列的顺序线性表La和Lb,并将它们合并为一个有序顺序
表Lc
〃显示La、Lb和Lc的内容
SqListLa,Lb,Lc;ElemTypezl,z2;
InitList_Sq(La);
coutvv”读入3个元素并插入到顺序表La中"vvendl;
for(i=l;i<=3;i++)
{cin>>zl;
Listinsert(La,zl);
}
coutw”顺序表La中所有元素如下:"<<endl;
ListTraverse_Sq(La);
InitList_Sq(Lb);
coutvv”读入3个元素并插入到顺序表Lb中"v<endl;
for(i=l;i<=3;i++){
c
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026恒丰银行合肥分行社会招聘18人备考题库及答案详解(网校专用)
- 2026贵州黔东南州天柱县招聘乡镇政府专职消防员19人备考题库附答案详解(典型题)
- 2026贵州毕节大方富民村镇银行招聘备考题库附答案详解(巩固)
- 2026广东中山大学招聘网络与信息中心专业技术人员1人备考题库含答案详解(夺分金卷)
- 2026江苏徐州市新盛集团下属润彭企管公司招聘1人备考题库带答案详解(完整版)
- 2026北京航空航天大学电子信息工程学院聘用编软件工程师F岗招聘3人备考题库含答案详解ab卷
- 2026湖南邵阳市大祥区城乡建设投资有限公司招聘7名员工备考题库含答案详解(培优a卷)
- 2026四川雅安市荥经县妇女联合会劳务派遣人员招聘3人备考题库带答案详解
- 2026成都环境投资集团有限公司下属子公司招聘技术管理岗等岗位42人备考题库及答案详解(夺冠)
- 养老院费用收取标准制度
- 欧贝委托书模板
- 春夏秋冬认识四季幼儿园课件
- 化妆色彩教程课件
- 2024年中国垃圾填埋场治理行业投资分析、市场运行态势、未来前景预测报告
- 《预应力混凝土管桩基础技术规程》DB42@489-2008
- 带式运输机传动系统中的一级圆柱齿轮减速器
- (正式版)JB∕T 7348-2024 钢丝缠绕式冷等静压机
- QC/T 629-2021 汽车遮阳板-PDF解密
- 国家生物安全
- 射流泵采油-资料课件
- 机械租赁合同电子版
评论
0/150
提交评论