利用链表实现集合的交差并

代码

#include<stdio.h>
#include<stdlib.h>
typedef struct node{int data;node *next;
}Node;
void Creat(Node *L)                                         //创建链表,赋值
{Node *s,*tc=L;int n,i;printf("请输入元素个数n:");scanf("%d",&n);while(n--){s=(Node*)malloc(sizeof(Node));scanf("%d",&s->data );                  tc->next =s;                                       //尾插法tc=s;}tc->next =NULL;} int Delete(Node *L)                                        //删除重复元素 {Node *pre,*tc;Node *p=L->next ;while(p != NULL){pre=p;                                              //保证pre为tc的前一个结点 tc=p->next;    while(tc != NULL){                                 //tc为p的前一个结点,从tc开始遍历 if(p->data == tc->data ){                       //若tc与p相同,则进行删除操作 pre->next =tc->next ;free(tc);tc=pre->next;continue;                                    //删除完需要结束本次循环 ,否则下次的语句会导致跳过一个数删除的不全(例如222结果会变成22)  }tc=tc->next ;                                  //不相等的时候向前移动 pre=pre->next;}p=p->next ;                                     //p遍历完,p前移再次遍历 }}int DisList(Node *L)                                        //输出链表
{Node *p=L->next;if(p == NULL) return 0;while(p != NULL){printf("%d ",p->data  );p=p->next;}return 1;
}
void DestroyList(Node *L)                                   //销毁链表
{Node *p,*pre;pre=L;p=pre->next ;while(p != NULL){free(pre);pre=p;p=p->next;} free(pre);return ;
}
Node* Union(Node *L,Node *L1)                           //实现链表的并集
{Node *L2=(Node *)malloc(sizeof(Node));                //创建一个新的链表存储并集 Node *tc=L2,*s;Node *p=L->next,*p1=L1->next;while(p != NULL){                                  //将L尾插进L2 tc->next =p;tc=p;p=p->next ;}    tc->next =NULL;while(p1 != NULL){                                  //将L1尾插L2 tc->next =p1;tc=p1;p1=p1->next ;}tc->next =NULL;Delete(L2);                                          //调用删除重复元素进行删除操作 return L2;                                         //返回L2
}
Node* UNion(Node *L,Node* L1)                           //求并集
{Node *L2=(Node*)malloc(sizeof(Node));             Node *p=L->next ;Node *p1=L1->next ;Node *tc=L2,*p2,*s;                                    //tc表示L2尾指针 while(p != NULL){                                  //遍历L while(p1 != NULL){                               //在L中遍历L1,看是否与L有相同元素 if(p->data == p1->data){                    //相同,尾插 s=(Node*)malloc(sizeof(Node));s->data =p->data ;tc->next =s;                         //尾插法 tc=s;tc->next =NULL;}p1=p1->next ;}p=p->next;p1=L1->next;}return L2;
}
Node* different(Node *L, Node *L1){                     //差集 int flag=1;                                           //标记作用,1:插入,0:跳过 Node *L2=(Node*)malloc(sizeof(Node));             Node *p=L->next ;Node *p1=L1->next;Node *tc=L2,*p2,*s;                                 //tc表示L2尾指针 while(p != NULL){                                  //遍历L flag=1;while(p1 != NULL){                               //在L中遍历L1,若相同,flag置为0,跳出本循环 if(p->data == p1->data){flag=0;                   break;}p1=p1->next ;}if(flag == 1){                                   //若遍历L1后为1则插入到L2中 s=(Node*)malloc(sizeof(Node));s->data =p->data;tc->next =s;                               //尾插 tc=s;}p=p->next;p1=L1->next;}tc->next =NULL;return L2;
}
int main()
{//初始化 Node *L=(Node *)malloc(sizeof(Node));Creat(L);Node *L1=(Node *)malloc(sizeof(Node));Creat(L1);Node *L2=(Node*)malloc(sizeof(Node));printf("并集为:");
//  L2=UNion(L,L1);printf("差集为:");
//  L2=different(L,L1);printf("交集为:");
//  L2=Union(L,L1);DisList(L2);return 0;} 

A.7链表练习题——集合的交差并相关推荐

  1. python交并补_Python 集合的交差并补操作及方法

    1.集合的交差并补 intersection() 交集 set1 ={'卢俊义','花荣', '吴用'} set2 ={'公孙胜','秦明','卢俊义'} res = set1.intersectio ...

  2. java链表集合_Java底层基于链表实现集合和映射--集合Set操作详解

    本文实例讲述了Java底层基于链表实现集合和映射--集合Set操作.分享给大家供大家参考,具体如下: 在Java底层基于二叉搜索树实现集合和映射中我们实现了底层基于二叉搜索树的集合,本节就底层如何基于 ...

  3. java集合交运算_java中计算集合的交差并集示例代码

    前言 本文主要给大家简单介绍下,如何使用apache commons以及guava的类库来计算集合的交差并集.分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. maven com.go ...

  4. Python数据结构 四种链表的集合

    python数据结构四个链表的集合 结点的创建 import os# 创建节点 class Node:def __init__(self, data):self.data = dataself.nex ...

  5. 冰冰学习笔记:这些链表练习题,你会吗?(中)

    欢迎各位大佬光临本文章!!!   还请各位大佬提出宝贵的意见,如发现文章错误请联系冰冰,冰冰一定会虚心接受,及时改正. 本系列文章为冰冰学习编程的学习笔记,如果对您也有帮助,还请各位大佬.帅哥.美女点 ...

  6. A和B 单链表表示 集合,求其 交集 并集 差集

    A和B 单链表表示 集合的 交集 并集 差集 /* A和B 单链表表示 集合的 交集 并集 差集 */ //#include <iostream> //using namespace st ...

  7. java链表交集并集,一个链表求集合并集交集的异常

    C/C++ code//求并集的函数: void bingji(mylist*p,mylist*q,mylist*&r)//r作为并集列表的头指针,p,q是输入的两个指针 { mylist * ...

  8. Java笔试面试练习题---集合

    一.单选题 1.ArrayList类的底层数据结构是( A ) A.数组结构 B.链表结构 C.哈希表结构 D.红黑树结构 解析:ArrayList底层的实现就是一个数组(固定大小),当数组长度不够用 ...

  9. C语言:用链表实现集合的并和交

    使用两个单链表表示两个集合: 可键盘输入集合的元素: 编写交算法和并算法 代码片段 建立链表 LinkList InitList() {//建立链表LinkList L, p,q;int d;L = ...

  10. 使用顺序表、单链表求集合运算

    ******.设有两个顺序表A和B,编写一个算法将属于A,但是不属于B的数据元素放大到另一个顺序表C中 (1).算法设计 遍历顺序表A,将A中每一个元素依次与顺序表B比较,如果相等直接跳过开始比较下一 ...

最新文章

  1. 小甲鱼Python课程18课课后题
  2. python flask与django的区别_真正搞明白Python中Django和Flask框架的区别
  3. python的68个内置函数
  4. 工具在软件过程改进中的重要作用
  5. hdu2110(普通母函数)
  6. BZOJ1453: [Wc]Dface双面棋盘
  7. #pragma once 与 #ifndef比较分析
  8. JAVA线程池_并发队列工作笔记0004---Callable原理_多线程执行Callable任务
  9. Spring Boot 学习笔记,这个太全了!
  10. 9、两个栈实现队列(Python)
  11. UltraISO9.3.0.2610中文绿色注册版
  12. java实现自动拨打电话语音提示
  13. 号外号外 !新媒之家APP2.1.0版本震撼上线!!!
  14. CYUSB3014固件部分低版本工程在Eclipse中编译得到img文件时无效的解决方案
  15. 如何使用mysql数据库做网站_php小型数据库(不用mysql做网站)
  16. DS SIMULIA Antenna Magus Professional 2021.5
  17. JDK自带的Timer定时器实现每天24点修改数据
  18. 用户中心登录注册整理
  19. KISSsoft 2022 SP3
  20. android手势密码源码,Android自定义UI手势密码改进版源码下载

热门文章

  1. C#编写的通过汉字得到拼音和五笔码
  2. 支付宝接口对接指南(一、支付宝文档解读和支付宝侧沟通)【保姆级】
  3. 美联储数字货币最新进展
  4. 大数据未来7大发展趋势
  5. Excel表中只能选择固定内容
  6. win10通过OneDrive实现办公室的电脑和家里电脑重要数据同步
  7. 计算机访问周期,访问周期最短的存储器是
  8. 读懂职场则规潜 潜伏者的上位秘诀
  9. 数学模型——数学与人类文明的桥梁
  10. hive-使用开窗函数实现百分比、topN、前百分比