集合交并差集
- 格式:docx
- 大小:22.11 KB
- 文档页数:8
达摩盘交集并集差集分1.引言1.1 概述概述部分将介绍本文的主题——达摩盘交集并集差集分。
在这一部分,我们将简要地介绍与达摩盘有关的基本概念,并提出本文的目标和结构。
达摩盘,也被称为维恩图或韦恩图,是一种用来展示集合之间关系的图形工具。
它由一个矩形框代表一个集合,集合内的元素用圆形来表示,通过不同的形状和位置来描述集合之间的交集、并集和差集等关系。
达摩盘在数学、逻辑学和统计学等领域中被广泛应用,它能够帮助我们直观地理解和分析集合之间的关系。
本文的目标是探讨并详细解释达摩盘中的交集、并集和差集的概念,并通过实例和图示加以说明。
我们将从介绍达摩盘的基本原理和构成开始,然后深入探讨交集、并集和差集等概念的含义和定义,以及它们在实际问题中的应用场景。
通过分析不同的案例和场景,我们将讨论这些集合操作符的特点、性质和计算方法。
本文的结构如下:首先,我们将介绍达摩盘的基本原理和构成,帮助读者理解和使用达摩盘进行集合操作。
接下来,我们将详细讨论交集的概念和定义,以及在实际问题中的应用。
然后,我们将探讨并集和差集的概念,并与交集进行比较和对比。
最后,我们将通过实例分析和案例讨论来加深对这些概念的理解,并总结文章的主要观点和结论。
通过阅读本文,读者将能够全面了解达摩盘交集并集差集的含义和用法,并能够运用它们解决实际问题。
同时,本文也将帮助读者加深对集合操作符及其特点的理解,为后续学习和研究提供基础。
在下一节,我们将开始介绍达摩盘的基本原理和构成。
1.2文章结构文章结构本文主要由引言、正文和结论三个部分组成。
1.引言在引言部分,首先要对文章的主题进行概述,简要介绍达摩盘、交集、并集和差集的概念。
接着,要说明本文的结构和目的,以便读者能够清楚地了解文章的组织和意图。
2.正文正文部分将详细介绍达摩盘、交集、并集和差集的概念、性质和应用。
具体来说:2.1 达摩盘在此部分,将介绍达摩盘的定义和起源。
可以讨论它的几何特征、应用领域和数学背景等。
基于单链表实现集合的交集、并集、差集的运算解题思路(单链表求交集、并集、差集的思想和顺序表求交集、并集、差集的思想基本相同)1.先通过CreateListR 函数将集合 a 和 b 中的元素添加到顺序表 ha 和 hb 中,添加过程使⽤的是顺序表原有的Initlist 函数(初始化表)和ListInsert 函数(向表中插⼊元素)。
2.因为原集合是⽆序的,所以我通过 sort 函数(选择排序),使得集合变得有序。
3.得到有序集合 ha 和 hb 后,便可以使⽤ Union 函数(类似归并的思想写出来的求并集的函数),求出 ha 和 hb 的并集。
4.⽽求交集的⽅法则是,通过将集合 a 中的元素⼀个⼀个取出,并通过函数LocateElem ,查看集合 hb 中是否存在该元素,如果存在则将元素放⼊ hc ,如果不存在,则舍去。
以此求得两集合的交集。
5.求两集合的差则可以反过来,同样通过将集合 a 中的元素⼀个⼀个取出,并通过函数LocateElem ,查看集合 hb 中是否存在该元素,如果不存在则将元素放⼊ hc ,如果存在,则舍去。
以此求得两集合的差集。
#include <iostream>#include <cstdio>#include <malloc.h>using namespace std;/* 定义单链表数据 */typedef char ElemType;typedef struct LNode{ElemType data;struct LNode *next;}LinkList;/* 单链表的初始化 */void InitList(LinkList *&L){L = (LinkList *)malloc(sizeof(LinkList));L->next=NULL;}/* 向单链表中插⼊数据元素 */bool ListInsert(LinkList *&L,int x,char e){int j = 0;LinkList *p = L, *s;while(p!=NULL && j<x-1){p = p->next;j++;}if(p==NULL){return false;}else{s = (LinkList *)malloc(sizeof(LinkList));s->data = e;s->next = p->next;p->next = s;return true;}}/* 输出单链表 */void DispList(LinkList *L){LinkList *p = L->next;while(p!=NULL){printf("%c ",p->data);p = p->next;}printf("\n");}/* 求单链表的长度 */int ListLength(LinkList *L){LinkList *p = L->next;int i = 0;while(p!=NULL){p = p->next;}return i;}/* 查看单链表是否为空 */bool ListEmpty(LinkList *L){return L->next==NULL;}/* 求单链表中某个数据元素值 */bool GetElem(LinkList *L,int i, ElemType &e) {LinkList *p = L;int j = 0;while(p!=NULL && j < i){p=p->next;j++;}if(p==NULL){return false;}else{e = p->data;return true;}}/* 在单链表中查找元素 */int LocateElem(LinkList *L,ElemType e){LinkList *p = L;int i = 0;while(p!=NULL && p->data!=e){p = p->next;i++;}if(p==NULL){return0;}else{return i;}}/* 删除单链表中第 i 个元素*/bool ListDelete(LinkList *&L,int i,ElemType &e) {int j = 0;LinkList *p = L, *q;while(p!=NULL && j < i - 1){p = p->next;j++;}if(p==NULL)return false;else{q = p->next;if(q==NULL)return false;e = q->data;p->next = q->next;free(q);return true;}}/* 删除单链表 */void DestroyList(LinkList *&L){LinkList *p = L;LinkList *q = p->next;while(q!=NULL){p = q;q = p->next;}free(p);}void CreateListR(LinkList *&L,ElemType e[],int n) {InitList(L);int i;for(i = 0;i < n; ++i){if(!LocateElem(L,e[i]))ListInsert(L,i+1,e[i]);}}void InsterSect(LinkList *a,LinkList *b,LinkList *&c) {DestroyList(c);InitList(c);LinkList *p = a->next;int i = 0;while(p!=NULL){if(LocateElem(b,p->data))ListInsert(c,++i,p->data);p = p->next;}}void Subs(LinkList *a,LinkList *b,LinkList *&c){DestroyList(c);InitList(c);LinkList *p = a->next;int i = 0;while(p!=NULL){if(!LocateElem(b,p->data))ListInsert(c,++i,p->data);p = p->next;}}void Union(LinkList *a,LinkList *b,LinkList *&c){InitList(c);LinkList *p = a->next;LinkList *q = b->next;int k = 0;while(p!=NULL && q!=NULL){if(p->data < q->data){ListInsert(c,k+1,p->data);p = p->next;k++;}else if(p->data == q->data){ListInsert(c,k+1,p->data);p = p->next;q = q->next;k++;}else{ListInsert(c,k+1,q->data);q = q->next;k++;}}while(p!=NULL){ListInsert(c,k+1,p->data);p = p->next;k++;}while(q!=NULL){ListInsert(c,k+1,q->data);q = q->next;}///cout<<"hehe"<<endl;}void sort(LinkList *&L){LinkList *p , *pre, *q, *k;InitList(p);int i = 0;char c;while(!ListEmpty(L)){pre = L ->next;c = pre->data;while(pre!=NULL){if(c>=pre->data)c = pre->data;pre = pre->next;}ListInsert(p,++i,c);int tag = LocateElem(L,c);ListDelete(L,tag,c);}L = p;}int main( ){LinkList *ha, *hb, *hc;ElemType a[]={'c','a','e','h'};ElemType b[]={'f','h','b','g','d','a'};printf("集合的运算如下\n");CreateListR(ha,a,4);CreateListR(hb,b,6);printf("原集合 A: "); DispList(ha); printf("原集合 B: "); DispList(hb); sort(ha);sort(hb);printf("有序集合A:"); DispList(ha); printf("有序集合B:"); DispList(hb); Union(ha,hb,hc);printf("集合的并C:"); DispList(hc); InsterSect(ha,hb,hc);printf("集合的交C:"); DispList(hc); Subs(ha,hb,hc);printf("集合的差C:"); DispList(hc); DestroyList(ha);DestroyList(hb);DestroyList(hc);return0;}。
#include<stdio.h>#include<malloc.h>#include<stdlib.h>struct set{int coef;struct set *next;};void createlist_p(struct set *&p,int n){int i;struct set *L;p=(struct set *)malloc(sizeof(set));p->next=NULL;for(i=n;i>0;i--){L=(struct set *)malloc(sizeof(set));牰湩晴尨请输入该集合中第%d个整数元素:,n-i+1); scanf(%d,&L->coef);L->next=p->next;p->next=L;}}//生成新链表用于存放两集合中的元素void printlist_p(struct set *&p){struct set *L;int i;L=p->next;晩??瀠楲瑮?该表为空!\n);while(L!=NULL){printf(%d ,L->coef);L=L->next;i++;}printf(\);}//打印输入的两集合中的元素void Addset(struct set *&p,struct set *&q,struct set *&r) {struct set *k,*m,*n;r=(struct set *)malloc(sizeof(set));r->next=NULL;k=p->next;for(;k;){m=(struct set *)malloc(sizeof(set));m->next=r->next;r->next=m;m->coef=k->coef;k=k->next;}//把第一个集合中的元素放在新集合中k=q->next;m=(struct set *)malloc(sizeof(set));m->next=r->next;r->next=m;m->coef=k->coef;k=k->next;for(;k;){for(n=r->next;(k->coef!=n->coef)&&n->next;){n=n->next;}//与新集合中的元素比较if((k->coef!=n->coef)&&!(n->next)){m=(struct set *)malloc(sizeof(set));m->next=r->next;r->next=m;m->coef=k->coef;}k=k->next;}//对第二个集合中的元素进行分析}//求A∪Bvoid Subset(struct set *&p,struct set *&q,struct set *&r){ struct set *k,*m,*n;r=(struct set *)malloc(sizeof(set));r->next=NULL;n=q->next;for(;n;){m=p->next;for(;(m->coef!=n->coef)&&m->next;){m=m->next;}if(m->coef==n->coef) {k=(struct set *)malloc(sizeof(set));k->next=r->next;r->next=k;k->coef=m->coef;}n=n->next;}}//求A∩Bvoid Intset(struct set *&p,struct set *&q,struct set *&r){ struct set *k,*m,*n;r=(struct set *)malloc(sizeof(set));r->next=NULL;m=p->next;for(;m;){n=q->next;for(;(m->coef!=n->coef)&&n->next;){n=n->next;}if(!n->next&&(m->coef!=n->coef)) {k=(struct set *)malloc(sizeof(set));k->next=r->next;r->next=k;k->coef=m->coef;}m=m->next;}}//求A-Bvoid bangzhu(){printf(\\t\t\t***********************************); printf(\\t\t\t* 求集合的交并差*);printf(\\t\t\t*********************************\n);}void main(){struct set *p,*q,*r;int m,n,node;bangzhu();for(;;){do{牰湩晴尨请输入您要选择操作的代码:\n);printf(:求两集合的并A∪B\n);printf(:求两集合的交A∩B\n);printf(:求两集合的差A-B\n);printf(:退出该程序\n);scanf(%d,&node);} while(node<0||node>3);if(node==0) exit(1);printf(\\t\t/*请输入集合A中元素的个数:*/\n);scanf(%d,&m);createlist_p(p,m);printf(\\t\t/*请输入集合B中元素的个数:*/\n);scanf(%d,&n);createlist_p(q,n);牰湩晴尨集合A中元素为:);printlist_p(p);牰湩晴尨集合B中元素为:);printlist_p(q);while(node<0||node>3);switch(node){case 1: Addset( p,q,r);printf(A∪B:\n);printlist_p(r);break;case 2: Subset( p,q,r);printf(A∩B:\n);printlist_p(r);break;case 3: Intset(p,q,r); printf(A-B:\n);printlist_p(r);break;}printf(\);}}可以了楼上方法是正确的,学习!把分给楼上主要原因是C程序中使用了C语言不支持的引用所致,修改如下://---------------------------------------------------------------------------#include<stdio.h>#include<malloc.h>#include<stdlib.h>typedef struct set{int coef;struct set *next;} set ;void createlist_p(struct set **p,int n){int i;struct set *L;*p=(struct set *)malloc(sizeof(set));(*p)->next=NULL;for(i=n;i>0;i--){L=(struct set *)malloc(sizeof(set));牰湩晴尨请输入该集合中第%d个整数元素:,n-i+1); scanf(%d,&L->coef);L->next=(*p)->next;(*p)->next=L;}}//生成新链表用于存放两集合中的元素void printlist_p(struct set **p){struct set *L;int i=0;L=(*p)->next;晩??瀠楲瑮?该表为空!\n);while(L!=NULL){printf(%d ,L->coef);L=L->next;i++;}printf(\);}// 打印输入的两集合中的元素void Addset(struct set **p,struct set **q,struct set **r) {struct set *k,*m,*n;*r=(struct set *)malloc(sizeof(set));(*r)->next=NULL;k=(*p)->next;for(;k;){m=(struct set *)malloc(sizeof(set));m->next=(*r)->next;(*r)->next=m;m->coef=k->coef;k=k->next;}//把第一个集合中的元素放在新集合中k=(*q)->next;m=(struct set *)malloc(sizeof(set));m->next=(*r)->next;(*r)->next=m;m->coef=k->coef;k=k->next;for(;k;){for(n=(*r)->next;(k->coef!=n->coef)&&n->next;){n=n->next;}//与新集合中的元素比较if((k->coef!=n->coef)&&!(n->next)){m=(struct set *)malloc(sizeof(set));m->next=(*r)->next;(*r)->next=m;m->coef=k->coef;}k=k->next;}//对第二个集合中的元素进行分析}//求A∪Bvoid Subset(struct set **p,struct set **q,struct set **r){ struct set *k,*m,*n;(*r)=(struct set *)malloc(sizeof(set));(*r)->next=NULL;n=(*q)->next;for(;n;){m=(*p)->next;for(;(m->coef!=n->coef)&&m->next;){m=m->next;}if(m->coef==n->coef) {k=(struct set *)malloc(sizeof(set));k->next=(*r)->next;(*r)->next=k;k->coef=m->coef;}n=n->next;}}//求A∩Bvoid Intset(struct set **p,struct set **q,struct set **r){ struct set *k,*m,*n;(*r)=(struct set *)malloc(sizeof(set));(*r)->next=NULL;m=(*p)->next;for(;m;){n=(*q)->next;for(;(m->coef!=n->coef)&&n->next;){n=n->next;}if(!n->next&&(m->coef!=n->coef)) {k=(struct set *)malloc(sizeof(set));k->next=(*r)->next;(*r)->next=k;k->coef=m->coef;}m=m->next;}}//求A-Bvoid bangzhu(void){printf(\\t\t\t***********************************);printf(\\t\t\t* 求集合的交并差*);printf(\\t\t\t*********************************\n);}void main(){struct set *p,*q,*r;int m,n,node;bangzhu();for(;;){do{牰湩晴尨请输入您要选择操作的代码:\n);printf(:求两集合的并A∪B\n);printf(:求两集合的交A∩B\n);printf(:求两集合的差A-B\n); printf(:退出该程序\n);scanf(%d,&node);}while(node<0||node>3);if(node==0) exit(1);printf(\\t\t/*请输入集合A中元素的个数:*/\n);scanf(%d,&m);createlist_p(&p,m);printf(\\t\t/*请输入集合B中元素的个数:*/\n);scanf(%d,&n);createlist_p(&q,n);牰湩晴尨集合A中元素为:);printlist_p(&p);printf( 集合B中元素为:);printlist_p(&q);//while(node<0||node>3);switch(node){case 1: Addset( &p,&q,&r);printf(A∪B:\n);printlist_p(&r);break; B:\n);printlist_p(&r);break; ∩case 2: Subset( &p,&q,&r);printf(A.case 3: Intset(&p,&q,&r); printf(A-B:\n);printlist_p(&r);break;}printf(\);}}//---------------------------------------------------------------------------。
集合运算交并差集合是数学中常见的一个概念,它是由一组无序的元素所组成的。
在集合理论中,常常需要进行集合的交、并、差等运算。
本文将详细介绍集合运算的概念和常见的操作方法。
一、交集运算交集是指给定两个或多个集合时,由两个或多个集合中共有的元素所组成的新的集合。
交集运算可以用符号"∩"来表示。
例如,有集合A={1, 2, 3, 4, 5}和集合B={4, 5, 6, 7, 8},则A和B的交集为A∩B={4, 5}。
交集运算即将A和B中共有的元素4和5提取出来。
二、并集运算并集是指给定两个或多个集合时,由这些集合中所有元素所组成的新的集合。
并集运算可以用符号"∪"来表示。
例如,有集合C={1, 2, 3}和集合D={3, 4, 5},则C和D的并集为C∪D={1, 2, 3, 4, 5}。
并集运算即将C和D中的所有元素合并到一个新的集合中。
三、差集运算差集是指给定两个集合A和B时,由属于A但不属于B的元素所组成的新的集合。
差集运算可以用符号"-"来表示。
例如,有集合E={1, 2, 3, 4, 5}和集合F={4, 5, 6, 7, 8},则E和F的差集为E-F={1, 2, 3}。
差集运算即从E中去掉属于F的元素。
总结起来,集合运算交并差是在集合理论中常见的操作方法。
交集提取出两个或多个集合中共有的元素,而并集合并了所有集合中的元素,差集则从一个集合中去掉了与另一个集合相同的元素。
在实际应用中,集合运算经常用于数据分析、数据库查询等领域。
例如,在数据库查询中,可以使用交集运算找出两个表格中共有的数据,使用并集运算将两个表格中的数据合并,使用差集运算将两个表格中不同的数据分开。
需要注意的是,在进行集合运算时,要保证操作的对象是集合,即元素无重复且无序。
一般情况下,集合运算允许空集的存在,即不含任何元素的集合。
最后,集合运算交并差是集合理论中重要的概念,它们在数学和计算机科学中都有广泛的应用。
实验报告实验课程:数据结构实验项目:实验一集合的并交差运算专业:计算机科学与技术班级:姓名:学号:指导教师:目录一、问题定义及需求分析(1)实验目的(2)实验任务(3)需求分析二、概要设计:(1)抽象数据类型定义(2)主程序流程(3) 模块关系三、详细设计(1)数据类型及存储结构(2)模块设计四、调试分析(1)调试分析(2)算法时空分析(3)经验体会五、使用说明(1)程序使用说明六、测试结果(1)运行测试结果截图七、附录(1)源代码一、问题定义及需求分析(1)实验目的设计一个能演示集合的并、交、差运算程序。
(2)实验任务1)采用顺序表或链表等数据结构。
2)集合的元素限定为数字和小写英文字母。
(3)需求分析:输入形式为:外部输入字符串;输入值限定范围为:数字和小写英文字母;输出形式为:字符集;程序功能:计算两个集合的交、并、差以及重新输入集合功能;二、概要设计:(1)抽象数据类型定义:线性表(2)主程序流程:调用主菜单函数初始化两个线性表作为集合给两个集合输入数据输出集合数据元素信息另初始化两个线性表创建选择功能菜单界面通过不同选项调用不同功能函数在每个功能函数里面加结束选择功能,实现循环调用功能菜单计算完毕退出程序;(3)模块关系:差运算并运算交运算新建集合结束/返回结束三、详细设计抽象数据类型定义:typedef struct{ElemType *elem;int length;int listsize;}SqList;存储结构:顺序表;模块1-在顺序表的逻辑为i的位置插入新元素e的函数;算法如下:/**在顺序表的逻辑为i的位置插入新元素e的函数**/Status ListInsert_Sq(SqList &L,int i,ElemType e){ElemType *newbase,*p,*q;if(i < 1 || i > L.length + 1) return 0; //i的合法值为(1 <= i <= L.length_Sq(L) + 1)if(L.length >= L.listsize){ //当前储存空间已满,增加分配newbase = (ElemType *)realloc(L.elem,(L.listsize + LISTINCREMENT) * sizeof(ElemType));if(!newbase) exit(-1); //储存分配失败L.elem = newbase; //新基址L.listsize += LISTINCREMENT; //增加储存容量}q = &(L.elem[i - 1]); //q为插入位置for(p = &(L.elem[L.length - 1]); p >= q; --p)(p + 1) = p; //插入位置及之后的元素往右移q = e; //插入e++L.length; //表长加1return 1;}模块二在顺序线性表L中查找第1个与e满足compare()的元素位序,若找到,则返回其在L中的位序,否则返回0算法如下:/**在顺序线性表L中查找第1个与e满足compare()的元素位序,若找到,则返回其在L中的位序,否则返回0**/int LocateElem_Sq(SqList L,ElemType e,Status(* compare)(ElemType,ElemType)){ElemType *p;int i;i = 1; //i的初值为第1个元素的位序p = L.elem; //p的初值为第1个元素的储存位置while(i <= L.length && !(* compare)(*p++,e))++i; //从表L中的第一个元素开始与e比较,直到找到L中与e相等的元素时返回该元素的位置if(i <= L.length) return i; //若i的大小小于表长,则满足条件返回ielsereturn 0; //否则,i值不满足条件,返回0}模块三集合交运算算法如下:/**求集合的交集的函数**/void Mix_Sq(SqList La,SqList Lb,SqList &Lc){int i;ElemType elem;Lc.length = 0; //将表Lc的长度设为0for(i = 1; i <= La.length; i++){ //依次查看表La的所有元素elem = La.elem[i-1]; //将表La中i位置的元素赋值给elemif(LocateElem_Sq(Lb,elem,Equal)) //在表Lb中查找是否有与elem相等的元素ListInsert_Sq(Lc,Lc.length+1,elem); //将表La与Lb 中共同的元素放在Lc中}}模块四集合并运算算法如下:/**求集合的并集的函数**/void Union_Sq(SqList La,SqList Lb,SqList &Lc){int i;ElemType elem;Lc.length=0; //将表Lc的长度初设为0for(i = 0; i < La.length; i++) //先将表La 的元素全部复制到表Lc中Lc.elem[Lc.length++]=La.elem[i];for(i = 1; i <= Lb.length; i++){elem = Lb.elem[i-1]; //依次将表Lb 的值赋给elemif(!LocateElem_Sq(La,elem,Equal)) //判断表La 中是否有与elem相同的值ListInsert_Sq(Lc,Lc.length+1,elem); //若有的话将elem放入表Lc中}}模块五集合的差运算算法如下:/**求集合的差集函数**/void Differ_Sq(SqList La,SqList Lb,SqList &Lc){int i;ElemType elem;Lc.length = 0;for(i = 1; i <= La.length; i++){elem = La.elem[i-1]; //把表La 中第i个元素赋值给elemif(!LocateElem_Sq(Lb,elem,Equal)) //判断elem在表Lb中是否有相同的元素ListInsert_Sq(Lc,Lc.length+1,elem); //若有,则把elem放入表Lc中,否则,就不存放}for(i = 1; i <= Lb.length; i++){elem = Lb.elem[i-1]; //把表Lb 中第i个元素赋值给elemif(!LocateElem_Sq(La,elem,Equal)) //判断elem在表La中是否有相同的元素ListInsert_Sq(Lc,Lc.length+1,elem); //若有,则把elem放入表Lc中,否则,就不存放}}四、调试分析问题分析及解决:首先,在编写程序时没有设置线性表的初始长度,导致集合元素输入错误;然后通过#define LIST_INIT_SIZE 100和#define LISTINCREMENT 10解决;时空分析:int LocateElem_Sq(SqList L,ElemType e,Status(*compare)(ElemType,ElemType))时间复杂度为O(n);Status ListInsert_Sq(SqList &L,int i,ElemType e) 时间复杂度为O(n);void Union_Sq(SqList La,SqList Lb,SqList &Lc) 时间复杂度为O(m*n);void Mix_Sq(SqList La,SqList Lb,SqList &Lc) 时间复杂度为O(m*n);void Differ_Sq(SqList La,SqList Lb,SqList &Lc) 时间复杂度为O(2*m*n);改进设想:当同时求两个以上的结合间的运算是需要先进性两个集合间的运算,然后在于另外的集合进行运算;若要同事进行多个集合的运算需要建立多个顺序表;经验体会:顺序表使用起来比较简单,但长度不可随意变化,适用于大量访问元素,而不适用于大量增添和删除元素;在内存中存储地址连续;五、使用说明第一步:点击运行按钮;第二步: 根据提示输入集合A(可以连续输入,只限输入小写字母和数字);第三步:程序自动显示输入结果;第四步:输入集合B(同第二步);第五步:跳出主菜单界面;第六步:根据选项输入对应运算项的数字序号;第七步:显示运算结果,并可继续进行选择运算还是退出;第八步:若继续运算则返回主菜单,否则退出;第九步:循环第六、七、八步,直至选择退出;六、测试结果输入界面:并运算结果:交运算结果:差运算结果:重新建立集合并运算:七、附录#include<stdio.h>#include<stdlib.h>#define LIST_INIT_SIZE 100//初始表空间大小#define LISTINCREMENT 10//表长增量typedef int Status; /**Status是函数类型**/typedef char ElemType;/*ElemType类型根据实际情况而定,这里假设为char*/typedef struct{ElemType *elem; /**储存空间基地址**/int length; /**当前长度**/int listsize;/**当前分配的储存容量(以sizeof(Elemtype)为单位)**/}SqList;SqList La,Lb,Lc,Ld;/**定义全局变量**//**构造一个空的线性表L**/Status InitList_Sq(SqList &L){L.elem = (ElemType *)malloc(LIST_INIT_SIZE * sizeof(ElemType));if(!L.elem) exit(-1); /**储存分配失败**/L.length = 0;L.listsize = LIST_INIT_SIZE;/**初始储存容量**/return 1;}/**在顺序表的逻辑为i的位置插入新元素e的函数**/Status ListInsert_Sq(SqList &L,int i,ElemType e){ElemType *newbase,*p,*q;if(i < 1 || i > L.length + 1)return 0;if(L.length >= L.listsize)//当前储存空间已满,增加分配{newbase=(ElemType*)realloc(L.elem,(L.listsize+LISTINCREMENT )*sizeof(ElemType));if(!newbase) exit(-1);//储存分配失败L.elem = newbase;L.listsize += LISTINCREMENT;//增加储存容量}q = &(L.elem[i - 1]);//q为插入位置for(p = &(L.elem[L.length - 1]); p >= q; --p)*(p + 1) = *p;//插入位置及之后的元素往右移*q = e;//插入e++L.length;return 1;}/**创建一个线性表,输入数据**/void CreateList_Sq(SqList &L){ElemType ch='\0';int inlist =0,j;while((ch) != '\n'){scanf("%c",&ch);//输入数据for(j = 0; j < L.length; j++)if(ch == L.elem[j])//判断表L中是否有与ch相等的元素 {inlist = 1; //若有,则inlist置1break; //跳出本轮循环}elseinlist =0; //否则inlist为0if(!inlist && ch != '\n')//若inlist为0且ch不为”\n” ListInsert_Sq(L,L.length+1,ch);//则将ch存入表L中 }}/*判断两元素是否相等,若相等则返回1;否则返回0*/Status Equal(ElemType a,ElemType b){if(a == b)return 1;//相等,返回1elsereturn 0;//否则,返回0}/*在顺序线性表L中查找第1个与e满足compare()的元素位序,若找到,则返回其在L中的位序,否则返回0*/int LocateElem_Sq(SqList L,ElemType e,Status(* compare)(ElemType,ElemType)){ElemType *p;int i;i = 1;p = L.elem;//p的初值为第1个元素的储存位置while(i <= L.length && !(* compare)(*p++,e))//循环查找表L 找出其中与e相等的元素的位置++i;if(i <= L.length)//若i小于表长return i;//则i满足条件,返回i的值elsereturn 0;//否则返回0}/*销毁线性表的函数*/Status Clear_Sq(SqList &L){ElemType elem;free(L.elem);L.elem = NULL;return 1;}/*打印顺序表函数*/void Print_Sq(SqList L){int i;for(i = 0; i < L.length; i++)printf("%2c",L.elem[i]);//通过for循环将表元素全部输出 if(L.length == 0) printf("空集");//若表长为0,则输出空表 printf("\n\t\t\t此集合中的个数 n = %d\n\n",L.length);}/*求集合的并集的函数*/void Union_Sq(SqList La,SqList Lb,SqList &Lc){int i;ElemType elem;Lc.length=0; //将表Lc的长度初设为0for(i = 0; i < La.length; i++) //先将表La的元素全部复制到表Lc中Lc.elem[Lc.length++]=La.elem[i];for(i = 1; i <= Lb.length; i++){elem = Lb.elem[i-1]; //依次将表Lb 的值赋给elemif(!LocateElem_Sq(La,elem,Equal)) //判断表La 中是否有与elem相同的值ListInsert_Sq(Lc,Lc.length+1,elem); //若有的话将elem放入表Lc中}}/*求集合的交集的函数*/void Mix_Sq(SqList La,SqList Lb,SqList &Lc){int i;ElemType elem;Lc.length = 0; //将表Lc的长度设为0for(i = 1; i <= La.length; i++){ //依次查看表La的所有元素elem = La.elem[i-1]; //将表La中i位置的元素赋值给elemif(LocateElem_Sq(Lb,elem,Equal)) //在表La中查找是否有与elem相等的元素ListInsert_Sq(Lc,Lc.length+1,elem); //将表La与Lb中共同的元素放在Lc中}}/*求集合的差集函数*/void Differ_Sq(SqList La,SqList Lb,SqList &Lc){int i;ElemType elem;Lc.length = 0;for(i = 1; i <= La.length; i++){elem = La.elem[i-1]; //把表La中第i个元素赋值给elemif(!LocateElem_Sq(Lb,elem,Equal)) //判断elem在表Lb中是否有相同的元素ListInsert_Sq(Lc,Lc.length+1,elem);//若有,则把elem放入表Lc中,否则,就不存放}for(i = 1; i <= Lb.length; i++){elem = Lb.elem[i-1]; //把表Lb中第i个元素赋值给elem if(!LocateElem_Sq(La,elem,Equal)) //判断elem在表La中是否有相同的元素ListInsert_Sq(Lc,Lc.length+1,elem); //若有,则把elem放入表Lc中,否则,就不存放}}void Index_Sq(){//主菜单函数char s;int l=1;InitList_Sq(La);//初始化表Laprintf("\n\t\t 请输入集合A:");CreateList_Sq(La);//创建表Laprintf("\t\t\t集合A为");Print_Sq(La);printf("\n\n");InitList_Sq(Lb);//初始化表Lbprintf("\t\t 请输入集合B:");CreateList_Sq(Lb);//创建表Lbprintf("\t\t\t集合B为");Print_Sq(Lb);printf("\n\n");InitList_Sq(Lc);//初始化表LcInitList_Sq(Ld);//初始化表Ldwhile(l){printf("\t\t ******* 请输入您的操作选项 1、2、3、4. ****** \n\n");printf("\t\t 1、进行集合的并运算\n");printf("\t\t 2、进行集合的交运算\n");printf("\t\t 3、进行集合的差运算\n");printf("\t\t 4、重新建立两个集合\n");printf("\t\t\t");scanf("%c",&s);switch(s){case '1' : system("cls");Union_Sq(La,Lb,Lc);//调用集合的并运算函数printf("\t\t\t集合A与集合B的并集为:");print_Sq(Lc);printf("\n");break;case '2' :system("cls");Mix_Sq(La,Lb,Lc);//调用集合的交集运算函数printf("\t\t\t集合A与集合B的交集为:");print_Sq(Lc);printf("\n");break;case '3' : system("cls");Differ_Sq(La,Lb,Lc);//调用集合的差集运算函数 printf("\t\t\t集合A与集合B的差集为:");print_Sq(Lc);printf("\n");break;case '4' :system("cls");Clear_Sq(La);//销毁表LaClear_Sq(Lb);//销毁表LbClear_Sq(Lc);//销毁表LcClear_Sq(Ld);//销毁表Ldgetchar();Index_Sq();//递归调用此函数break;default : printf("\t\t\t#\tenter data error!\n");printf("\n");}printf("\t\t 继续计算请输入1,停止计算请输入0 \n");printf("\t\t\t");scanf("%d",&l);getchar();system("cls");}printf("\n\t\t**************** 谢谢使用!*****************\n");}int main(){printf("\t\t************* 欢迎使用集合操作运算器************\n");Index_Sq();//调用主菜单函数return 0;}。
高中数学集合知识点总结8篇篇1一、集合的基本概念集合是数学中的基本概念之一,它是由具有某种共同属性的事物组成的总体。
在数学中,我们常常用集合来表示一些数、点、线等的总体。
集合的基本特性包括确定性、互异性、无序性以及可表示性。
常见的集合表示方法有列举法、描述法以及图像法等。
对于集合的学习,首先要明确集合的概念及其表示方法,这是后续学习的基础。
二、集合的运算集合的运算包括并集、交集、差集和补集等。
并集表示两个或多个集合中所有元素的集合;交集表示两个集合中共有的元素组成的集合;差集表示在一个集合中但不在另一个集合中的元素组成的集合;补集则表示属于某个集合的所有元素之外的所有元素组成的集合。
在解题过程中,要根据题目的要求,选择合适的集合运算方法。
三、集合的基本关系集合之间的关系包括子集、真子集、相等集合等。
子集表示一个集合的所有元素都在另一个集合中;真子集表示一个集合是另一个集合的子集,且两者不相等;相等集合表示两个集合完全相同。
此外,还要了解空集的概念,即不含有任何元素的集合。
掌握集合的基本关系,有助于理解集合的运算及其性质。
四、数列与集合数列是一种特殊的集合,它按照一定规律排列的数序列。
等差数列和等比数列是数列中最常见的两种形式。
等差数列中的任意两项之差相等,等比数列中的任意两项之比相等。
在解决数列问题时,要充分利用数列的性质和公式,简化计算过程。
五、函数的定义域与值域与集合的关系函数的定义域与值域是函数概念的重要组成部分。
函数的定义域是指函数自变量的取值范围,值域则是函数因变量的取值范围。
这两个范围都可以用集合来表示。
在求解函数的定义域和值域时,要充分利用函数的性质,结合数轴或不等式等方法进行求解。
六、总结与应用掌握高中数学集合知识点,首先要明确集合的基本概念、表示方法以及运算性质。
在此基础上,要理解数列与集合的关系,掌握函数的定义域与值域与集合的联系。
在实际应用中,要灵活运用所学知识,解决数学问题。
离散数学实验报告专业班级:姓名:学号:实验成绩:1.【实验题目】集合运算2.【实验目的】编程实现集合的交、并、差和补运算。
3.【实验内容】从键盘输入两个命题变元P和Q的真值,求它们的合取、析取、条件和双条件的真值。
4. 【实验要求】通过以下界面提示实现相应的集合运算**************************************************************** 请分别输入集合A与集合B的元素:请选择(1—5)要进行的集合运算:1.集合的交运算(A⋂B)2.集合的并运算(A⋃B)3.集合的差运算(A-B)4.集合的补运算(~A=E-A)5.继续/退出(y/n)****************************************************************5. 【算法描述】(1)用数组A,B,C,E表示集合。
假定A={1,3,4,5,6,7,9,10}, B={2,,3,4,7,8,10}, E={1,2,3,4,5,6,7,8,9,10}, 输入数组A,B,E(全集),输入数据时要求检查数据是否重复(集合中的数据要求不重复),要求集合A,B是集合E的子集。
以下每一个运算都要求先将集合C置成空集。
(2)二个集合的交运算:A⋂B={x|x∈A且x∈B}把数组A中元素逐一与数组B中的元素进行比较,将相同的元素放在数组C 中,数组C便是集合A和集合B的交。
C语言算法:for(i=0;i<m;i++)for(j=0;j<n;j++)if(a[i]= =b[j]) c[k++]=a[i];(3)二个集合的并运算:A⋃B={x|x∈A或x∈B}把数组A中各个元素先保存在数组C中。
将数组B中的元素逐一与数组B中的元素进行比较,把不相同的元素添加到数组C中,数组C便是集合A和集合B 的并。
C语言算法:for(i=0;i<m;i++)c[i]=a[i];for(i=0;i<n;i++){for(j=0;j<m;j++)if(b[i]= =c[j]) break;if(j= =m){ c[m+k]=b[i];k++;}}(4)二个集合的差运算:A-B={x|x∈A且x∉B}将数组A中的元素逐一与数组B中的元素进行比较,把数组A与数组B不同的元素保存在数组C中,数组C便是集合A和集合B的差A-B。
python集合⽐较(交集、并集,差集)集合⽅法⼤全python的set和其他语⾔类似, 是⼀个⽆序不重复元素集, 基本功能包括关系测试和消除重复元素. 集合对象还⽀持union(联合), intersection(交), difference(差)和sysmmetric difference(对称差集)等数学运算.sets ⽀持 x in set, len(set),和 for x in set。
作为⼀个⽆序的集合,sets不记录元素位置或者插⼊点。
因此,sets不⽀持 indexing, slicing, 或其它类序列(sequence-like)的操作。
下⾯来点简单的⼩例⼦说明把。
>>> x = set('spam')>>> y = set(['h','a','m'])>>> x, y(set(['a', 'p', 's', 'm']), set(['a', 'h', 'm']))再来些⼩应⽤。
>>> x & y # 交集set(['a', 'm'])>>> x | y # 并集set(['a', 'p', 's', 'h', 'm'])>>> x - y # 差集set(['p', 's'])记得以前个⽹友提问怎么去除海量列表⾥重复元素,⽤hash来解决也⾏,只不过感觉在性能上不是很⾼,⽤set解决还是很不错的,⽰例如下:>>> a = [11,22,33,44,11,22]>>> b = set(a)>>> bset([33, 11, 44, 22])>>> c = [i for i in b]>>> c[33, 11, 44, 22]很酷把,⼏⾏就可以搞定。
集合的概念、子集、交集、并集、补集课 题集合的概念、子集、交集、并集、补集教学目标1、了解集合的概念2、理解子集、补集以及全集的概念3、结合图形使学生理解交集并集的概念性质重点、难点重点:集合、子集、补集和全集的概念 难点:交集并集的概念,符号之间的区别与联系考点及考试要求理解集合及其表示;掌握子集、交集、并集、补集的概念。
教学内容一、知识回顾1、集合的概念。
2、集合的分类。
3、集合的性质。
4、常用的数集。
5、集合的表示。
6、元素与元素和集合与元素的关系以及集合与集合之间的关系。
二、全集与补集1 补集:一般地,设S 是一个集合,A 是S 的一个子集(即S A ⊆),由S 中所有不属于A 的元素组成的集合,叫做S 中子集A的补集(或余集),记作A C S ,即C S A=},|{A x S x x ∉∈且2、性质:C S (C S A )=A ,C S S=φ,C S φ=S3、全集:如果集合S 含有我们所要研究的各个集合的全部元素,这个集合就可以看作一个全集,全集通常用U 表示S A三、典例分析例1、(1)若S={1,2,3,4,5,6},A={1,3,5},求C S A(2)若A={0},求证:C N A=N*A例2、已知全集U=R,集合A={x|1≤2x+1<9},求CUB的关系例3、已知S={x|-1≤x+2<8},A={x|-2<1-x≤1},B={x|5<2x-1<11},讨论A与CS四、课堂练习1、已知全集U={x|-1<x<9},A={x|1<x<a},若A≠φ,则a的取值范围是()(A)a<9(B)a≤9(C)a≥9(D)1<a≤92、已知全集U={2,4,1-a},A={2,a2-a+2}如果C U A={-1},那么a的值是?3、已知全集U,A是U的子集,φ是空集,B=C U A,求C U B,C Uφ,C U U4、设U={梯形},A={等腰梯形},求C U A.5、已知U=R ,A={x |x 2+3x+2<0}, 求C U A .6、集合U={(x ,y )|x ∈{1,2},y ∈{1,2}} ,A={(x ,y )|x ∈N*,y ∈N*,x+y=3},求C U A .7、设全集U (U ≠Φ),已知集合M ,N ,P ,且M=C U N ,N=C U P ,则M 与P 的关系是( )(A )M=C U P ; (B )M=P ; (C )M ⊇P ; (D )M ⊆P .五、交集和并集1.交集的定义一般地,由所有属于A 且属于B 的元素所组成的集合,叫做A,B 的交集.记作A B (读作‘A 交B ’), 即A B={x|x ∈A ,且x ∈B }.如:{1,2,3,6} {1,2,5,10}={1,2}.又如:A={a,b,c,d,e },B={c,d,e,f}.则A B={c,d,e}.2.并集的定义一般地,由所有属于集合A 或属于集合B 的元素所组成的集合,叫做A,B 的并集.记作:A B (读作‘A 并B ’), 即A B ={x|x ∈A ,或x ∈B}).如:{1,2,3,6} {1,2,5,10}={1,2,3,5,6,10}.(1)交集与并集的定义仅一字之差,但结果却完全不同,交集中的且有时可以省略,而并集中的或不能省略,补集是相对于全集而言的,全集不同,响应的补集也不同;(2)交集的性质:A B B A =,A A A = ,∅=∅ A ,A B A ⊆ ,B B A ⊆ ;(3)并集的性质:A B B A =,A A A = ,A A =∅ ,B A A ⊆,B A B ⊆;(4)B A A B A ⊆⇔= ,A B A B A ⊆⇔= ;(5)集合的运算满足分配律:)()()(C A B A C B A =,)()()(C A B A C B A =;(6)补集的性质:∅=A C A u ,U A C A u = ,A A C C u u =)(;(7)摩根定律:B C A C B A C u u u =)(,B C A C B A C u u u =)(;六、典例分析例1 、设A={x|x>-2},B={x|x<3},求A B.例2 、设A={x|x 是等腰三角形},B={x|x 是直角三角形},求A B.例3 、A={4,5,6,8},B={3,5,7,8},求A B.例5、设A={x|-1<x<2},B={x|1<x<3},求A ∪B.说明:求两个集合的交集、并集时,往往先将集合化简,两个数集的交集、并集,可通过数轴直观显示;利用韦恩图表示两个集合的交集,有助于解题例6(课本第12页)已知集合A={(x,y)|y=x+3},{(x,y)|y=3x-1},求A B.注:本题中,(x,y)可以看作是直线上的的坐标,也可以看作二元一次方程的一个解.高考真题选录:一、选择题1.设集合{|32}M m m =∈-<<Z ,{|13}N n n MN =∈-=Z 则,≤≤( )A .{}01,B .{}101-,,C .{}012,,D .{}1012-,,, 2.已知全集U =R ,集合{}|23A x x =-≤≤,{}|14B x x x =<->或,那么集合)(B C A U 等于( )A .{}|24x x -<≤B .{}|34x x x 或≤≥C .{}|21x x -<-≤D .{}|13x x -≤≤3.设集合{}{}{}1,2,3,4,5,1,2,3,2,3,4U A B ===,则=)(B A C U ( )(A){}2,3 (B){}1,4,5 (C){}4,5 (D){}1,54.设集合|0{8}x x N U =∈<≤,{1,2,4,5}S =,{3,5,7}T =,则=)(T C S U ( )(A ){1,2,4} (B ){1,2,3,4,5,7} (C ){1,2} (D ){1,2,4,5,6,8}5.集合{}|lg ,1A y R y x x =∈=>,}{2,1,1,2B =--则下列结论正确的是( )A .}{2,1AB =-- B . ()(,0)RC A B =-∞C .(0,)A B =+∞D . }{()2,1R C A B =--6.满足M ⊆{a 1, a 2, a 3, a 4},且M ∩{a 1 ,a 2, a 3}={ a 1·a 2}的集合M 的个数是( )(A )1 (B)2 (C)3 (D)47.定义集合运算:{},,.A B z z xy x A y B *==∈∈设{}1,2A =,{}0,2B =,则集合A B *的所有元素之和为( )A .0B .2C .3D .68.已知全集{12345}U =,,,,,集合2{|320}A x x x =-+=,{|2}B x x a a A ==∈,,则集合)(B A C U 中元素的个数为( )A .1B .2C .3D .4二.填空题:1.若集合{}|2A x x =≤,{}|B x x a =≥满足{2}A B =,则实数a = .2.已知集合M={}R y x x y x ∈=+-,,01 ,N={}R y x y x y ∈=+,,122 则M ⋂N=______3.已知集合P={}{}R x x y y Q R x x y y ∈+-==∈+-=,2,,22,那么P ⋂Q=____________。
#include<stdio.h>#include<malloc.h>typedefstruct LLNode{int data;struct LLNode *next;}LNode,*LinkList;#define SIZE sizeof(LLNode)void bubble_sort(LinkList &Head,int n) {int chage;chage=true;LinkList p,pnext,q;for(int i=0;i<n-1&&chage;i++){chage=false;q=Head;//三¨y个?变À?量¢?都?各¡Â自Á?归¨¥位?p=Head->next;pnext=p->next;while(pnext){if(p->data>pnext->data){p->next=pnext->next;q->next=pnext;pnext->next=p; //将?逆?序¨©的Ì?两¢?个?结¨¢点Ì?交?换?q=pnext ;pnext=p->next ;chage=true;}elseif(p->data<pnext->data){q=p ;p=p->next ;pnext=p->next ;}else { //两¢?个?结¨¢点Ì?相¨¤等̨¨则¨©删¥?除y重?复¡ä的Ì?结¨¢点Ì? q->next =pnext;free(p);p=pnext;pnext=p->next ;}}}}//初?始º?化¡¤集¡¤合?void InitLinkList(LinkList &Head,int n){int elem,tem = 0;printf ("<元a素?>\n");Head=(LinkList)malloc(100*SIZE);Head->next=NULL; //建¡§立¢¡é空?的Ì?单Ì£¤链¢¡ä表À¨ªLinkList p=Head;while(tem < n){LinkList newLNode=(LinkList)malloc(SIZE);scanf("%d",&elem);newLNode->data=elem;p->next = newLNode;p = p->next ;tem++;} //尾2插?入¨?法¤¡§建¡§表À¨ªp->next=NULL;}//并¡é运?算? ,ê?利¤?用®?原-空?间?LinkList Bingji(LinkList &Head1,LinkList &Head2,LinkList &Head3) {LNode *p1=Head1->next;LNode *p2=Head2->next;LNode *p3=Head3=Head1;while(p1 && p2){if(p1->data < p2->data){p3->next =p1;p3=p3->next ;p1=p1->next ;}else{if(p1->data > p2->data){p3->next =p2;p3=p3->next ;p2=p2->next ;}else{p3->next = p1;p3=p3->next ;p1=p1->next ;p2=p2->next ;}}}p3->next =(p1)?p1:p2;free(Head2);return Head3;}//并¡é运?算? ,ê?重?新?申¥¨º请?结¨¢点Ì?空?间?LinkList Bingji_2(LinkList Head1,LinkList Head2,LinkList &Head3) {LNode *p1=Head1->next;LNode *p2=Head2->next;Head3=(LinkList)malloc(SIZE);LNode *p3=Head3;p3->next =NULL;LNode *s;while(p1&&p2){if(p1->data<p2->data){s=(LNode *)malloc(SIZE);s->data =p1->data ;s->next =NULL;p3->next =s;p3=s;p1=p1->next ;}else{if(p1->data>p2->data){s=(LNode *)malloc(SIZE);s->data =p2->data ;s->next =NULL;p3->next =s;p3=s;p2=p2->next ;}else{s=(LNode *)malloc(SIZE);s->data =p1->data ;s->next =NULL;p3->next =s;p3=s;p1=p1->next ;p2=p2->next ;}}}if (p1!=NULL){s=(LNode *)malloc(SIZE);s->data =p1->data ;s->next =NULL;p3->next =s;p3=s;p1=p1->next ;}if (p2!=NULL){s=(LNode *)malloc(SIZE);s->data =p2->data ;s->next =NULL;p3->next =s;p3=s;p2=p2->next ;}return Head3;}//两¢?个?集¡¤合?的Ì?差?集¡¤ ,利¤?用®?原-空?间?LinkList Chaji(LinkList &Head1,LinkList &Head2,LinkList &Head3){LinkList pa,pb,r,p;pa=Head1->next;pb=Head2->next;r=Head3=Head1;while(pa&&pb){if(pa->data<pb->data){r->next=pa;r=r->next;pa=pa->next;}elseif(pa->data>pb->data)pb=pb->next;else{r->next=pa->next; free(pa);pa=r->next;}}while (Head2->next) //释º¨ª放¤?Head2链¢¡ä表À¨ª所¨´有®D的Ì?结¨¢点Ì?空?间?{ p=Head2->next; Head2->next=p->next;free(p);}return Head3;}//两¢?个?集¡¤合?的Ì?差?集¡¤ ,重?新?申¥¨º请?空?间?LinkList Chaji_2(LinkList Head1,LinkList Head2,LinkList &Head3) {LinkList p1,p2,p3,s;p1=Head1->next;p2=Head2->next;Head3=(LinkList)malloc(SIZE);Head3->next=NULL;p3=Head3;while(p1&&p2){if(p1->data<p2->data){s=(LNode *)malloc(SIZE);s->data =p1->data ;s->next =NULL;p3->next =s;p3=s;p1=p1->next ;}elseif(p1->data>p2->data)p2=p2->next;else{p2=p2->next ;p1=p1->next;}}while(p1){s=(LNode *)malloc(SIZE);s->data =p1->data ;s->next =NULL;p3->next =s;p3=s;p1=p1->next ;}return Head3;}//两¢?个?集¡¤合?交?集¡¤ ,利¤?用®?原-空?间?LinkList Jiaoji(LinkList &Head1,LinkList &Head2,LinkList &Head3){LinkList pa,pb,r,p;pa=Head1->next;pb=Head2->next;r=Head3=Head1;while(pa&&pb){if(pa->data<pb->data){r->next =pa->next ;free(pa);pa=r->next ;}elseif(pa->data>pb->data)pb=pb->next;else{r->next=pa; r=pa;pa=pa->next;}}while(pa){r->next =pa->next ;free(pa);pa=r->next ;}while (Head2->next) //释º¨ª放¤?Head2链¢¡ä表À¨ª所¨´有®D的Ì?结¨¢点Ì?空?间?{ p=Head2->next; Head2->next=p->next;free(p);}return Head3;}//两¢?个?集¡¤合?交?集¡¤ ,重?新?申¥¨º请?结¨¢点Ì?空?间?LinkList Jiaoji_2(LinkList Head1,LinkList Head2,LinkList &Head3){LinkList pa,pb,p3,s;pa=Head1->next;pb=Head2->next;Head3=(LinkList)malloc(SIZE);Head3->next=NULL;p3=Head3;while(pa&&pb){if(pa->data<pb->data)pa=pa->next ;elseif(pa->data>pb->data)pb=pb->next;else{s=(LNode *)malloc(SIZE);s->data =pa->data ;s->next =NULL;p3->next =s;p3=s;pa=pa->next ;pb=pb->next ;}}return Head3;}//打䨩印®?集¡¤合?元a素?void PrintLinkList(LinkList head){LinkList p=head->next ;while(p){printf ("%d ",p->data);p=p->next;}printf ("\n");}/*int main(){LinkList head1,head2,head3;printf ("输º?入¨?A集¡¤合?的Ì?元a素?:\n"); InitLinkList(head1);printf ("输º?入¨?B集¡¤合?的Ì?元a素?:\n"); InitLinkList(head2);Bingji(head1,head2,head3);printf ("两¢?个?集¡¤合?并¡é集¡¤为a:\n"); PrintLinkList(head3);printf ("输º?入¨?A集¡¤合?的Ì?元a素?:\n"); InitLinkList(head1);printf ("输º?入¨?B集¡¤合?的Ì?元a素?:\n"); InitLinkList(head2);Jiaoji(head1,head2,head3);printf ("两¢?个?集¡¤合?交?集¡¤为a:\n");PrintLinkList(head3);printf ("输º?入¨?A集¡¤合?的Ì?元a素?:\n");InitLinkList(head1);printf ("输º?入¨?B集¡¤合?的Ì?元a素?:\n");InitLinkList(head2);Chaji(head1,head2,head3);printf ("两¢?个?集¡¤合?差?集¡¤为a:\n");PrintLinkList(head3);return 0;}*/void main(){LinkList head1,head2,head3;int n1,n2;printf ("输º?入¨?A集¡¤合?的Ì?元a素?的Ì?个?数ºy:\n"); scanf("%d",&n1);InitLinkList(head1,n1);bubble_sort(head1,n1);PrintLinkList(head1);printf ("输º?入¨?B集¡¤合?的Ì?元a素?的Ì?个?数ºy:\n"); scanf("%d",&n2);InitLinkList(head2,n2);bubble_sort(head2,n2);PrintLinkList(head2);Bingji_2(head1,head2,head3);printf ("两¢?个?集¡¤合?并¡é集¡¤为a:\n");PrintLinkList(head3);Jiaoji_2(head1,head2,head3);printf ("两¢?个?集¡¤合?交?集¡¤为a:\n");PrintLinkList(head3);Chaji_2(head1,head2,head3);printf ("两¢?个?集¡¤合?差?集¡¤为a:\n");PrintLinkList(head3);}。