求解集合A和集合B的差集
来源:互联网 发布:c语言词汇 编辑:程序博客网 时间:2024/06/05 11:03
求解集合A和集合B的差集
题目:已知集合A和B的元素分别用不含头结点的单链表存储,函数difference()用于求解集合A与B的差集,并将结果保存在集合A的单链表中。例如,若集合A={5,10,20,15,25,30},集合B={5,15,35,25},完成计算后A={10,20,30}。
算法思想:取出集合A中每一个元素,与集合B中对比,找到即可删除此节点,否则保留。
prev实现删除节点后的连接
当prev=NULL时,说明是首次找到A和B的公有元素,此时*LA指向pa->next,*LA仍然是头结点;
当prev!=NULL时,prev指向pa->next,实现删除结点的链接。
代码实现:
#include#include #include typedef struct ListNode{int elem;struct ListNode* next;}Node,*pNode,*pList;void Init(pList* pplist){assert(pplist);*pplist = NULL;}pNode BuyNode(int x){pNode cur = (pNode)malloc(sizeof(Node));if (cur == NULL){perror("malloc");return NULL;}cur->elem = x;cur->next = NULL;return cur;}void Push(pList* pplist, int x){pNode NewNode = BuyNode(x);if (*pplist == NULL){*pplist = NewNode;}else{pNode cur = *pplist;while (cur->next){cur = cur->next;} cur->next = NewNode;}}void Print(pList plist){pNode cur = plist;while (cur){printf("%d ", cur->elem);cur = cur->next;}printf("NULL\n");}void difference(pNode* LA, pNode LB){pNode pa, pb, q;pNode prev = NULL;pa = *LA; //*LA是指向指针的指针,pa指向集合的元素while (pa){pb = LB; //pb指向集合的元素while (pb && pa->elem != pb->elem)pb = pb->next;if (pb) //pa所指向元素与pb所指的元素相等{if (!prev){*LA = pa->next;}else{prev->next = pa->next;}q = pa; //求差集,即删除pa结点pa = pa->next;free(q);}else{prev = pa;pa = pa->next;}}}void Test(){pList plist1;Init(&plist1);Push(&plist1, 12);Push(&plist1, 2);Push(&plist1, 92);Push(&plist1, 1);Push(&plist1, 11);Print(plist1);pList plist2;Init(&plist2);Push(&plist2, 12);Push(&plist2, 21);Push(&plist2, 92);Push(&plist2, 1);Print(plist2);difference(&plist1, plist2);Print(plist1);}
测试结果:
阅读全文
0 0
- 求解集合A和集合B的差集
- 求解集合A与B的差集
- 求解集合A与B的差集
- 集合A与B的差集
- [经典面试题]求解集合A与B的差集
- 已知集合A和B的元素分别用不含头结点的单链表存储,函数difference()用于求解集合A与B的差集,并将结果保存在集合A的单链表中
- 已知集合A和B的元素分别用不含头结点的单链表存储,函数difference()用于求解集合A与B的差集,并将结果保存在集合A的单链表中。
- 链表--已知集合A和B的元素分别用不含头结点的单链表存储,函数difference()用于求解集合A与B的差集,并将结果保存在集合A的单链表中。
- 已知集合A和B的元素分别用不含头结点的单链表存储,函数difference()用于求解集合A与B的差集,并将结果保存在集合A的单链表中
- 已知集合A和B的元素分别用不含头结点的单链表存储, 求解集合A与B的差集,并将结果保存在集合A的单链表中
- 已知集合A和B的元素分别用不含头结点的单链表存储,函数difference()用于求解集合A与B的差集,并将结果保存在集合A的单链表中。
- 已知集合A和B的元素分别用不含头结点的单链表存储,函数difference()用于求解集合A与B的差集,并将结果保存在集合A的单链表中。例如,若集合A={5,10,20,15,25,30},集合B={
- 求差集:已知集合A和B的元素分别用不含头结点的单链表存储,函数difference()用于求解集合A与B的差集,并将结果保存在集合A的单链表中。例如,若集合A={5,10,20,15,25,30},集
- 集合的差集
- 已知两个链表A和B分别表示两个集合,其元素递增排列。请设计算法求出两个集合A和B的差集(即仅由在A中出现而不在B中出现的元素所构成的集合),并以同样的形式存储,同时返回该集合的元素个数。
- 求解两个集合的差集,集合是以单向链表存储
- 求集合{a}+集合{b}的并集
- 递增有序的顺序表表示集合,求解两个集合的交集 并集 差集(c语言实现)
- python+appium的物理按键代码
- java8-03-全新的日期时间API
- C++ 引用
- mongodb如何访问远程数据库
- (0058)iOS开发之iOS8新特性IBDesignable的使用
- 求解集合A和集合B的差集
- 2017.07.25回顾 骚气EDA研究学习
- 面向对象 多态作业
- 【cuda】样例目录
- 写python程序需要注意的问题
- Java并发——核心理论
- linux下搭建hadoop和spark环境之安装jdk
- ios-Category补充
- (C++)跨平台日志库——yaolog v1.6