顺序表合并和归并的实验报告.doc_第1页
顺序表合并和归并的实验报告.doc_第2页
顺序表合并和归并的实验报告.doc_第3页
顺序表合并和归并的实验报告.doc_第4页
顺序表合并和归并的实验报告.doc_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

数据结构实验报告院_信息科学与工程学院_ 专业 _软件工程_ _2011 级 1103班 姓名_甘路唐_ 学号20111611093 2013年3月 30日1. 上机题目:顺序表的建立、合并、归并算法实现设有线性表LA=(3,5,8,11),LB=(2,6,8,9,11,15,20);要求用顺序表实现.(1)若LA和LB分别表示两个集合A和B,求新集合A=AB(相同元素不保留)预测输出LA=(3,5,8,11,2,6,9,15,20)(2)若LA和LB分别表示两个集合A和B,求新集合A=AB(相同元素保留)预测输出LA=(2,3,5,6,8,8,9,11,11,15,20)2. 需求分析该程序通过结构体和顺序表实现对两个顺序表的合并和归并的功能。开发工具采用Visual C+6.0,具体要求如下:(1) 输入数据必须为int的整形数据,其数值范围为:-214748362147483647(2) 输出的数据格式为:%3d(3) 测试数据的数据为:3,5,8,11 2,6,8,9,11,15,20.3. 详细设计(1) 该程序采用顺序表的存储结构,其数据结构定义如下:#define maxsize 100typedef struct int datamaxsize; int length;sqlist;(2) 所用数据类型中每个操作的伪码算法如下:1) 初始化顺序表Program initlist(sqlist L)L.length=0End inlist2) 创建顺序表Program creatlist(sqlist L) int i,elem,n Input n For i=0 TO Input elem EndFor L.datai=elem End creatlist3) 归并顺序表Program megerlist(sqlist la,sqlist lb,sqlist *lc) int i=0,j=0,k=0 While(ila.length AND jlb.length) If(la.dataidatak+=la.datai+ else lc-datak+=lb.dataj+ EndIf EndWhile While(idatak+=la.datai+; EndWhile While(jdatak+=lb.dataj+ EndWhile End megerlist4) 连接顺序表并删除顺序表中的相同元素Program connectlist(sqlist la,sqlist lb,sqlist *lc) int i,j,a,b,k=0; For i=0 To la.length lc-datak+=la.datai EndFor For j=0 TO la.length lc-datak+=lb.dataj EndFor For a=1 TO a=Lc.length For b=a+1 To b=Lc.length If Lc.dataa-1=Lc.datab-1 Then For k=b To kLc.length Lc.datak-1=Lc.datak EndFor EndIf Lc.lengthEndFor EndFor End connectlist5) 输出顺序表 Program printlist(sqlist L) int i; For i=0 To idatai EndFor End printlist4. 调试分析(1) 调试过程中遇到的问题与解决方法(一) 在megerlist(sqlist la,sqlist lb,sqlist *lc)中使用while(ilength & jlength)和if(la-dataidataj)不合法,将-改成.(二) 在creatlist(sqlist *l)中使用scanf(%d,l-datai),编译器提示内存指令错误,将其改为scanf(%d,&elem);l-datai=elem;(三) 在主函数中调用megerlist(sqlist la,sqlist lb,sqlist *lc)时写成megerlist( la, lb,lc),应将其改为megerlist( la, lb,&lc)(2) 经验和体会很多时候写的代码自己看上去没什么问题,实际上有很多小问题,写代码尤其要注意细节。调用函数式也要弄清实参和形参的传递关系,不能想当然。写程序的过程中如果卡住了就一定要请教一下同学,不要一错再错,也许一经过同学提醒就一下子懂了,胜过你一直在那儿磨。5. 测试结果6. 附件见20111611093甘路唐.cpp7. 详细设计#include #include #define maxsize 100typedef struct int datamaxsize; int length;sqlist;void initlist (sqlist &L)L.length=0;void creatlist(sqlist &L) int i,n; printf(请输入链表元素个数(0-%d):,maxsize); scanf(%d,&n); printf(请输入链表元素 :); for(i=0;in;i+) scanf(%d,&L.datai); L.length+; printf(n); void megerlist(sqlist &La,sqlist &Lb,sqlist &Lc) int i=0,j=0,k=0; while(iLa.length & jLb.length) if(La.datai=Lb.dataj) Lc.datak+=La.datai+; else Lc.datak+=Lb.dataj+; while(iLa.length) Lc.datak+=La.datai+; while(jLb.length) Lc.datak+=Lb.dataj+; Lc.length=La.length+Lb.length; void unionlist(sqlist &La,sqlist &Lb,sqlist &Lc) for(int i=0,k=0;iLa.length;i+,k+) Lc.datak=La.datai; for(int j=0;jLb.length;j+,k+) Lc.datak=Lb.dataj; Lc.length=La.length+Lb.length; int a,b; for(a=1;a=Lc.length;a+) for(b=a+1;b=Lc.length;b+)if(Lc.dataa-1=Lc.datab-1)for(int k=b;kLc.length;k+)Lc.datak-1=Lc.datak;Lc.length-; void printlist(sqlist &L) int i; for(i=0;iL.length;i+) printf(%3d,L.datai); printf(n); int main() sqlist La,Lb,Lc; printf(-初始化顺序表LA-n); initlist ( La); creatlist( La); printf(-初始化顺序表LB-n); initlist ( Lb); creatlist( Lb); printf(-LA和LB合并后为-n); initlist ( Lc); unionlist( La, Lb, Lc); printlist(Lc); printf(-LA和LB归并后为-n); initlist ( Lc); megerlist( La, L

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论