


免费预览已结束,剩余3页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
,.题目一:集合的并、交运算1 设计思想首先,建立两个带头结点的有序单链表表示集合a 和 b。须注意的是:利用尾插入法建立有序单链表,输入数值是升序排列。其次,根据集合的运算规则,利用单链表的有序性,设计交、并和差运算。根据集合的运算规则, 集合 ab中包含所有既属于集合a 又属于集合 b 的元素。因此,须查找单链表a 和 b 中的相同元素并建立一个链表存于此链表中。根据集合的运算规则,集合 ab 中包含所有或属于集合 a 或属于集合 b的元素。因此, 遍历两链表的同时若元素相同时只将集合 a 中的元素存于链表中,若集合 a 中的下一个元素小于 b 中的元素就将 a 中的元素存于新建的链表中。反之将 b 中的元素存于链表中。2 所用数据结构线性结构利用链式存储结构实现集合的基本运算。3 源代码分析#include #include #define error 0#define ok 1typedef int status; typedef char elemtype;typedef struct lnode线性表的链式存储结构elemtype data; struct lnode *next;lnode,*linklist; #includetext.hlnode* greatlist(int *n,int n)/建立一个带有头结点的单链表linklist p,q,l;l=p=(lnode *)malloc(sizeof(lnode); l-next=null;if(n!=0)for(int i=0;idata=ni;p-next=q;/指针后移p=q;p-next=null; / 对于非空表,最后结点的指针域放空指针return l;lnode* jiaoji(linklist la,linklist lb)/求两集合的交集linklist pa,pb,pc,lc; pa=la-next;pb=lb-next;lc=(linklist)malloc(sizeof(lnode);/申请存储空间lc-next=null;pc=lc; while(pa&pb)if(pa-data=pb-data)到 lc 上pc-next=(linklist)malloc(sizeof(lnode);/ 若相等就申请存储空间链pc=pc-next;pc-data=pa-data;pa=pa-next;/la,lb 的指针后移pb=pb-next;else if(pa-datapb-data)/若 pa 所指的元素大于pb 所指的元素 pb 指针后移pb=pb-next; elsepa=pa-next;pc-next=null;/ 最后给 pc 的 next 赋 null return lc;lnode* bingji(linklist la,linklist lb) /求两集合的并集linklist pa,pb,pc,lc; pa=la-next;pb=lb-next;lc=(linklist)malloc(sizeof(lnode); lc-next=null;pc=lc; while(pa&pb)if(pa-data=pb-data)pc-next=(linklist)malloc(sizeof(lnode);/ 若 pa 所指的元素等于pb所指的元素申请空间将值存入链表lc, pa,pb 指针后移pc=pc-next;pc-data=pa-data; pa=pa-next; pb=pb-next;else if(pa-datapb-data)pc-next=(linklist)malloc(sizeof(lnode);/ 若 pa 所指的元素大于pb所指的元素申请空间将值存入链表lc, pb 指针后移pc=pc-next;pc-data=pb-data; pb=pb-next;elsepc-next=(linklist)malloc(sizeof(lnode);/ 若 pa 所指的元素小于pb所指的元素申请空间将值存入链表lc, pa 指针后移pc=pc-next;pc-data=pa-data; pa=pa-next;pc-next=pa?pa:pb;return lc;void print_linklist(linklist l)/输出元素linklist p=l-next;while(p)/ 链表不为空时输出链表中的值printf( %3c ,p-data); p=p-next;printf( n );void main()linklist l1,l2,la,lb; int a4=a,b,c,f;int b4=c,d,e,f;printf(1) 含多个结点的顺序表 a, b和, cc, , f dn, ); e, f printf( 建立链表 l1 为n); l1=greatlist(a,4); print_linklist(l1);printf( 建立链表 l2 为n); l2=greatlist(b,4); print_linklist(l2);printf( 两链表的交集为: n); la=jiaoji(l1,l2); print_linklist(la);printf( 两链表的并集为: n); lb=bingji(l1,l2); print_linklist(lb);printf(2) 含一个结点的顺序表 a和空表 n); int a11=a;int b11=0;printf( 建立链表 l1 为n); l1=greatlist(a1,1); print_linklist(l1);printf( 建立链表 l2 为n); l2=greatlist(b1,0); print_linklist(l2);printf( 两链表的交集为: n);la=jiaoji(l1,l2);print_linklist(la);printf( 两链表的并集为: n);lb=bingji(l1,l2); print_linklist(lb); printf(3)2 个空表n);int a21=0;int b21=0;printf( 建立链表 l1 为n); l1=greatlist(a2,0); print_linklist(l1);printf( 建立链表 l2 为n); l2=greatlist(b2,0); print_linklist(l2);printf( 两链表的交集为: n); la=jiaoji(l1,l2);,.print_linklist(la);printf( 两链表的并集为: n); lb=bingji(l1,l2); print_linklist(lb);free(l1);free(l2);free(la);free(lb);4 测试数据及运行结果(1)含多个结点的顺序表 a, b和, cc, , f d, e, f (2)含一个结点的顺序表 a和空表(3)2 个空表5 算法分析(1) ) lnode* greatlist()/ 尾插法建立链表算法的时间复杂度为 o(n), n为输入元素个数。(2) ) lnode* jiaoji(linklist la,linklist lb)算法时间复杂度为 o(m+n), m为集合a
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年生物催化技术在创新药物研发中的应用前景分析
- 2025年生态养殖基地智能化改造:技术创新与成本效益分析
- 林业文化创意产业园创新创业项目商业计划书
- 旅游商品购物创新创业项目商业计划书
- 屠宰污水处理系统创新创业项目商业计划书
- 信息安全技术期末试题库及答案解析
- 基金从业考试题库正式版及答案解析
- 三基护理选择题库及答案解析
- 期货从业考试范围及答案解析
- 安全员c1类考试题库及答案解析
- 化工阀门管件培训课件
- 白酒生产安全员考试题库及答案解析
- 2025店面劳动合同范本:超市收银员专项协议
- 《树之歌》课件 小学部编版语文二年级上册
- 画廊与画家签约合同范本
- 展会联合承办协议书范本
- 2025-2026冀人版三年级科学上册教学设计(附目录)
- 2025设备担保抵押借款合同
- 早教托育合伙人合同协议
- 抵押合同变更协议书范本
- 2025年舞蹈培训学校工作计划及方案范文
评论
0/150
提交评论