网站大量收购独家精品文档,联系QQ:2885784924

实验4集合的交并和差运算的实现.doc

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实验4集合的交并和差运算的实现

班级:计算机11-3班 学号:11034050333姓名:曲玉昆 成绩:_________ 实验四 集合的交、并和差运算的实现 1. 问题描述 用有序单链表表示集合,实现集合的交、并和差运算。 2. 基本要求 ⑴ 对集合中的元素,用有序单链表进行存储; ⑵ 实现交、并、差运算时,不另外申请存储空间; ⑶ 充分利用单链表的有序性,算法有较好的时间性能。 3. 设计思想 首先,建立两个带头结点的有序单链表表示集合A和B。单链表的结点结构和建立算法请参见教材,需要注意的是:利用头插法建立有序单链表,实参数组应该是降序排列。 其次,根据集合的运算规则,利用单链表的有序性,设计交、并和差运算。 ⑴ 根据集合的运算规则,集合中包含所有既属于集合A又属于集合B的元素。因此,需查找单链表A和B中的相同元素并保留在单链表A中。算法如下: ⑵ 根据集合的运算规则,集合中包含所有或属于集合A或属于集合B的元素。因此,对单链表B中的每个元素x,在单链表A中进行查找,若存在和x不相同的元素,则将该结点插入到单链表A中。算法请参照求集合的交集自行设计。 ⑶ 根据集合的运算规则,集合A-B中包含所有属于集合A而不属于集合B的元素。因此,对单链表B中的每个元素x,在单链表A中进行查找,若存在和x相同的结点,则将该结点从单链表A中删除。算法请参照求集合的交集自行设计。 templateclass T struct Node{ T data; NodeT*next;}; template class T class LinkList{ public: LinkList(T a[],int n);//建立有n个元素的单链表 ~LinkList(); void Interest(NodeT *A, NodeT *B);//求交集 void Sum(NodeT *A,NodeT *B);/ void Subtraction(NodeT *A,NodeT *B); void PrintList(); void Show(int i); NodeT *first;}; templateclass T LinkListT::LinkList(T a[],int n){ NodeT*s; first = new NodeT; first-next=NULL; for(int i=0;in;i++){ s = new NodeT; s-data=a[i]; s-next=first-next; first-next=s; }} template class T LinkListT::~LinkList(){ NodeT *p,*q; p = first;//工作指针p初始化 while(p) //释放单链表的每一个结点的存储空间{ q = p;//暂存被释放结点 p = p-next;//工作指针p指向被释放结点的下一个结点,使单链表不断开 delete q; }} templateclass T void LinkListT::Interest(NodeT *A,NodeT *B){ NodeT *pre,*p,*q; pre = A;p =A -next;q = B-next; while(pq){ if(p-data q-data){ pre-next = p-next; p = pre-next;} else if(p-data q-data){ q = q-next;} else{ pre = p; p = p-next; q = q-next; } }} //求并集 templateclass T void LinkListT::Sum(NodeT *A,NodeT *B{ NodeT *pre,*p,*q; pre = A; p = A-next; q = B-next; while(pq){ if(p-data q-data){ pre = p; p = p-next;} else if(p-data q-data){ q = q-next;} else{ pre-next = p-next; p = p-next; q = q-next;}}} templateclass T void LinkListT::Subtraction(NodeT *A,NodeT *B){ NodeT *pre,*p,*q,*pra; pre = A; pra = B; p = A-next; q = B-next; while(pq){ if(

您可能关注的文档

文档评论(0)

shenlan118 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档