链表-交集,并集,差集

上传人:mg****85 文档编号:36659628 上传时间:2018-03-31 格式:DOC 页数:4 大小:50KB
返回 下载 相关 举报
链表-交集,并集,差集_第1页
第1页 / 共4页
链表-交集,并集,差集_第2页
第2页 / 共4页
链表-交集,并集,差集_第3页
第3页 / 共4页
链表-交集,并集,差集_第4页
第4页 / 共4页
亲,该文档总共4页,全部预览完了,如果喜欢就下载吧!
资源描述

《链表-交集,并集,差集》由会员分享,可在线阅读,更多相关《链表-交集,并集,差集(4页珍藏版)》请在金锄头文库上搜索。

1、一个函数求两链表的求两链表的交、差、并集简单说下算法的思路:例如有如下 2 个链表(有序):L1: 1 -2 -4 -6 -7 (设其游标指针为 Pa)L2: 2 -3 -4 -5 -6-8(设其游标指针为 Pb)使用归并的思想求两链表的交、差、并集必须明确如下几点:1.巧妙地移动游标指针,当两链表元素相同时,二者是同时移动的。 2.规定当 L1 的元素小于 L2 时值,只移动 Pa. 3.当 L2 的元素小于 L1,此时的元素真是 L1 中没有的,即 L2-L1 的差集。 4.把 L2-L1 的差集从 L2 中删除,L2 中所剩的即二者的交集。 5.把 L2-L1 的差集有序地接到 L1 中

2、即二者的并集。有了如上的思路,代码就好实现了:#include #include typedef int ElemType;typedef struct LNode ElemType data; struct LNode *next;LNode,*LinkList;/链表的建立 void IntiList(LinkList LinkList q,p=L; puts(“请输入链表的长度: “); scanf(“%d“, for(i=0;idata); p-next=q; p=q; p-next=NULL; void Show(LinkList L) for(LinkList p=L-next;p

3、;p=p-next) printf(“%d “,p-data); printf(“n“); /L1 和 L2 都为有序的,获得集合 L1 和 L2 的并集 L1 和交集 L2 /把 L2 和 L1 的差集 L3(L2-L1)从 L2 中删掉并插入到 L1 中 LinkList Fun(LinkList LinkList Pa=L1,Pb=L2,Pc,Pd=L3;while(Pa-next Pb=Pb-next; else if(Pa-next-data next-data) /L1next; else /只有 L2 中比 L1 小的,才是 L1 中没有的(差集) Pc=Pb-next; Pb-

4、next=Pc-next; /删掉 Pc Pd-next=Pc; /尾查法构建差集 L3 Pd=Pc;Pc-next=Pa-next; /把删掉的 Pc 有序地插入到 L1 中 Pa-next=Pc; Pa=Pc; Pd-next=Pb-next; /L2 中剩下的也是差集 if(Pb-next!=NULL) /L2 中还剩下比 L1 大的从 L2 中删除并接到 L1 后面 Pa-next=Pb-next; Pb-next=NULL; return L3; int main() LinkList head1=(LinkList)malloc(sizeof(LNode); LinkList head2=(LinkList)malloc(sizeof(LNode); IntiList(head1); IntiList(head2); LinkList head3=Fun(head1,head2); puts(“他们的交集为:“); Show(head1); puts(“他们的并集为:“); Show(head2); puts(“他们的差集为(L2-L1):“); Show(head3); system(“pause“); /*测试用例 5 1 2 4 6 7 6 2 3 4 5 6 8 */

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号