合并两个非递减有序线性表.doc_第1页
合并两个非递减有序线性表.doc_第2页
合并两个非递减有序线性表.doc_第3页
合并两个非递减有序线性表.doc_第4页
合并两个非递减有序线性表.doc_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

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

文档简介

/* 实验一(顺序表):设有非递减有序线性表 LA(3,5,8,11)和LB=(2,6,8,9,11,15,20),若LA和LB分别表示两个集合A和B,求新集合AAUB(并操作,相同元素不保留);预测输出:LA=(3, 5, 8, 11, 2, 6, 9, 15, 20) */以下是求集合A=AUB的算法 /*status merge(sqlist &la,sqlist lb)/ 将lb中和la中元素不同的数据元素归并至la中 len=la.length;/la中元素的个数q=la.elem+len;/q为插入位置pa=la.elem;pb_last=lb.elem+lb.length-1;/lb中表尾元素的地址for(pb=lb.elem;pb=pb_last;pb+)for(;pa=la.elem+len-1&*pala.elem+len-1|*pa*pb)/若表中不存在和*pb相等的元素,则插入if(la.length=la.listsize)/若容量不够,增加分配newbase=(int *)realloc(la.elem,(la.listsize+LISTINCREMENT)*sizeof(int);if(!newbase) exit(OVERFLOW);la.elem=newbase;la.listsize+=LISTINCREMENT;q=la.elem+la.length;/q为插入位置/ end if *q+=*pb;(la.length)+;/end if/ end forreturn OK;/merge*/以下是程序#include#include#include#define LISTINCREMENT10#define OK1#define ERROR0#define OVERFLOW-1/* 类型定义 */typedef structint *elem;int length;int listsize; sqlist;typedef int status ;/* 操作 */status creat(sqlist &l)/* 建立含有n个数据元素的顺序表 */int i,n;printf(请输入表中数据元素的个数:);scanf(%d,&n);while(n=0)printf(数值太小,请重新输入!);scanf(%d,&n);l.length=n;/表长为元素个数l.elem=(int *)malloc(n*sizeof(int);if(!l.elem) exit(OVERFLOW);l.listsize=n;printf(请输入%d个元素:n,n);for(i=0;in;i+)/输入n个元素scanf(%d,l.elem+i);scanf(%*c);/消除最后一个元素后回车对后续输入的影响return OK;status merge(sqlist &la,sqlist lb)/* 将lb中和la中元素不同的数据元素归并至la中 */int *pa,*pb,*newbase,*pb_last,len,*q;len=la.length;/la中元素的个数q=la.elem+len;pa=la.elem;pb_last=lb.elem+lb.length-1;/lb中表尾元素的地址for(pb=lb.elem;pb=pb_last;pb+)for(;pa=la.elem+len-1&*pala.elem+len-1|*pa*pb)/若表中不存在和*pb相等的元素,则插入if(la.length=la.listsize)/若容量不够,增加分配newbase=(int *)realloc(la.elem,(la.listsize+LISTINCREMENT)*sizeof(int);if(!newbase) exit(OVERFLOW);la.elem=newbase;la.listsize+=LISTINCREMENT;q=la.elem+la.length;/q为新的插入位置/ end if *q+=*pb;(la.length)+;/ end if/ end for return OK;void print(sqlist l)/ 输出顺序表l中的数据元素 int i;for(i=0;i=l.length-1;i+)printf(%5d,l.elemi);printf(n);void destroy(sqlist &l)free(l.elem);l.elem=NULL;l.length=0;l.listsize=0;void main()sqlist la,lb;int i;char ch,c;for(i=0;i=60;i+) printf(*);printf(ncreat:C print:P merge:M destroy:D exit:En);for(i=0;i=60;i+) printf(*);printf(n);printf(请输入:n);ch=getchar();fflush(stdin);while(ch!=E&ch!=e)switch(ch)case r:case :break;case C:case c:printf(建立表A or B ?请输入A或Bn);scanf(%c,&c);while(c=n|c= ) scanf(%c,&c);fflush(stdin);if(c=a|c=A) creat(la);else if(c=b|c=B) creat(lb);else printf(输入出错!请重新选择操作命令!n);break;case P:case p:printf(输出表A or B ?请输入A或Bn);scanf(%c,&c);while(c=n|c= ) scanf(%c,&c);fflush(stdin);if(c=a|c=A)if(la.elem) print(la);else printf(表A不存在!n);else if(c=b|c=B)if(lb.elem) print(lb);else printf(表B不存在!n);else printf(输入出错!请重新选择操作命令!n);break;case M:case m:if(!la.elem)printf(表A不存在!n);else if(!lb.elem)printf(表B不存在!n);elsemerge(la,lb);printf(归并完毕!n);break;case D:case d:printf(销毁表A or B ?请输入A或Bn);scanf(%c,&c);while(c=n|c= ) scanf(%c,&c);fflush(stdin);if(c=a|c=A)if(la.elem) destroy(la);else printf(表A不存在!n);else

温馨提示

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

评论

0/150

提交评论