LinkList DifferenceList(LinkList L1, LinkList L2) { //求出差集 A-B(除去集合A和集合B相同的元素,剩下A的集合元素) LinkList s1,s2,p,q,s; Init(&s); s1 = L1; //A的集合 L1 s2 = Intersection(L1,L2,0); //交集 p=s1->next; //利用p指向集合A这个表 while(p) { q=s2->next; while(q) { //遍历交集 if(strcmp(p->data,q->data)!=0) { //当s2与s1中没有相同的元素时,取出不相同的元素,有相同的即结束 q=q->next; } else { break; } } if(!q) { //将取出的元素放入到链表s中 LinkList inter = (LinkList)malloc(sizeof(LLinkList));//头插法插入 strcpy(inter->data,p->data); inter->next = s->next; s->next = inter; } p=p->next; } Output(s); return s; }
时间: 2024-04-23 09:24:46 浏览: 162
数据结构课程设计-集合的并交补差.docx
这是一段 C 语言代码,实现了求 LinkList 类型的差集操作,即将集合 A 中与集合 B 相同的元素去除,得到剩下的元素集合。具体实现过程如下:
1. 定义 LinkList 类型的指针变量 s1、s2、p、q、s,其中 s1 指向集合 A,s2 指向集合 A 和集合 B 的交集,p 和 q 分别用于遍历集合 A 和交集 s2,s 用于存储 A-B 的结果。
2. 利用 Init 函数初始化链表 s。
3. 遍历集合 A,对于每一个元素,遍历交集 s2,若找到与之相同的元素,则退出内层循环,否则将该元素加入链表 s 中。
4. 返回链表 s,即为 A-B 的结果。
需要注意的是,该代码中的 Intersection 函数用于求 A 和 B 的交集,第三个参数为 0 表示不保留重复元素。此外,该代码中使用了头插法将元素加入链表 s 中。
阅读全文