《c语言数据结构单链表的交并差集运算实现(共7页).docx》由会员分享,可在线阅读,更多相关《c语言数据结构单链表的交并差集运算实现(共7页).docx(7页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上数据结构上机实验 课后练习报告姓名:冯天明学号:班级:通信1412015年9月28日星期一实验五:实现A 、B两个单链表表示的集合的交集、并集和差集实验代码:#include#include#define OK 0#define ERROR -1#define OVERFLOW -2typedef int ElemType;typedef struct LNodeElemType data; /定义数据域LNode *next; /定义指针域 LNode,*LinkList;void InitList(LinkList *L) /创建链表头*L = ( LinkLis
2、t )malloc( sizeof(LNode) );if(!L) exit(OVERFLOW); /头结点内存申请失败(*L)-next = NULL;void DerstorList(LinkList &L) /清空链表LinkList p;while(L-next)p = L-next;L-next = p-next;free(p);void ClearList(LinkList *L,int n) /初始化链表LinkList p ; int i;for(i = 0;idata);p-next = (*L)-next; /头插法( *L)-next = p; void InserLis
3、t(LinkList *L,ElemType e) /头插法插入数据LinkList p;p = (LinkList )malloc(sizeof( LNode );p-data = e;p-next = (*L)-next; /头插法( *L)-next = p; void DisplaList(LinkList L) /输出链表LinkList head;head = L-next;if(head=NULL)printf(集合为空!n);while(head) /遍历链表printf(%4d,head-data); /输出节点信息head = head-next;printf(n);int
4、 isPresent(LinkList L,ElemType data) /判断链表中是否已经存在data该元素LinkList p = L-next;while(p) /遍历链表,查找是否存在data值if( p-data = data ) return 1;p = p-next; return 0; /*求两个链表的交集*/int Intersection(LinkList L1,LinkList L2,LinkList L3) LinkList p,q;p = L1-next;q = L2-next;while( p )while( q ) /判断两链表的元素是否相当,并且存入的链表中不
5、存在该元素即可存入if(p-data = q-data & !isPresent(L3,p-data)InserList(&L3,p-data);q = q-next; q = L2-next; /复位p = p-next;return OK;/*求链表的并集*/void Union(LinkList L1,LinkList L2,LinkList L3)LinkList p,q;p = L1-next;q = L2-next; DerstorList(L3); /清空链表,重新存入数据while( p )/如果p中的元素不在并集链L3中,防止L1中有重复元素if(!isPresent(L3,
6、p-data) InserList(&L3,p-data); /插入元素p = p-next;p = L1-next;while(q)if(!(isPresent(L3,q-data) /q-data元素不存在并集表中,则插入 InserList(&L3,q-data); /把L2表中的元素插入q = q-next;/*求链表的差集*/void Subtraction(LinkList L1,LinkList L2,LinkList L3)LinkList p,q;p = L1-next;q = L2-next;DerstorList(L3);while(p)if(!(isPresent(L2
7、,p-data) /如果L2中不存在data值,即为L1-L2差集InserList(&L3,p-data);p = p-next; void main()LinkList L1,L2,L3;int number;InitList(&L1); /创建空链表InitList(&L2);InitList(&L3); /存储交并差集的链表printf(请输入链表L1的元素个数:);scanf(%d,&number);printf(输入链表L1的内容:n);ClearList(&L1,number); /初始化链表L1printf(请输入链表L2的元素个数:);scanf(%d,&number);pr
8、intf(输入链表L2的内容:n);ClearList(&L2,number); /初始化链表L2 printf(L1:);DisplaList(L1);printf(L2:);DisplaList(L2);printf(L1 L2为(交集):); Intersection(L1,L2,L3); /求链表L1与L2的交集DisplaList(L3);printf(L1 L2为(并集):); Union(L1,L2,L3); /求链表L1 L2的并集DisplaList(L3);printf(L1 - L2(补集):);Subtraction(L1,L2,L3); /求链表L1 L2 的差集(补集)DisplaList(L3); 专心-专注-专业