第七章-集合与搜索-C++数据结构-教学课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《第七章-集合与搜索-C++数据结构-教学课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第七 集合 搜索 C+ 数据结构 教学 课件
- 资源描述:
-
1、集合运算的文氏集合运算的文氏(Venn)图图Template class Set Set(int MaxSetSize):MaxSize(MaxSetSize);void MakeEmpty(Set&s);int AddMember(Set&s,const Type x);int DelMember(Set&s,const Type&x);void Assign(Set&s1,Set&s2);void Union(Set&s1,Set&s2);void Intersection(Set&s1,Set&s2);void Difference(Set&s1,Set&s2);int Contains
2、(Set&s,const Type&x);int Equal(Set&s1,Set&s2);int SubSet(Set&s1,Set&s2);#include const int DefaultSize=100;class Set private:int*bitVector;int MaxSize;public:Set(int MaxSetSize=DefaultSize);Set()delete bitVector;void MakeEmpty()for(int i=0;i MaxSize;i+)bitVectori=0;int AddMember(const int x);int Del
3、Member(const int x);Set&operator=(Set&right);Set&operator+(Set&right);Set&operator*(Set&right);Set&operator-(Set&right);int Contains(const int x);int SubSet(Set&right);int operator=(Set&right);Set s1,s2,s3,s4,s5;int index,equal;/构造集合构造集合 for(int k=0;k 10;k+)/集合赋值集合赋值 s1.AddMember(k);s2.AddMember(k+7
4、);/s1:0,1,2,9,s2:7,8,9,16 s3=s1+s2;/求求s1与与s2的并的并 0,1,16 s4=s1*s2;/求求s1与与s2的交的交 7,8,9 s5=s1-s2;/求求s1与与s2的差的差 0,1,2,3,4,5,6 index=s1.SubSet(s4);/求求s4在在s1中首次匹配中首次匹配 cout index endl;/位置位置,index=7 equal=s1=s2;/集合集合s1与与s2比较相等比较相等cout equal 0);bitVector=new int MaxSize;assert(bitVector!=0);for(int i=0;i=0&
5、x=0&x MaxSize);if(bitVectorx)bitVectorx=0;return 1;return 0;Set&Set:operator=(Set&right)assert(MaxSize=right.MaxSize);for(int i=0;i MaxSize;i+)bitVectori=right.bitVectori;return*this;Set&Set:operator+(Set&right)assert(MaxSize=right.MaxSize);for(int i=0;i MaxSize;i+)bitVectori=bitVectori|right.bitVec
6、tori;return*this;Set&Set:operator*(Set&right)assert(MaxSize=right.MaxSize);for(int i=0;i MaxSize;i+)bitVectori=bitVectori&right.bitVectori;return*this;Set&Set:operator-(Set&right)assert(MaxSize=right.MaxSize);for(int i=0;i=0&x MaxSize);return bitVectorx;int Set:operator=(Set&right)assert(MaxSize=rig
7、ht.MaxSize);for(int i=0;i MaxSize;i+)if(bitVectori!=right.bitVectori)return 0;return 1;int Set:SubSet(Set&right)assert(MaxSize=right.MaxSize);for(int i=0;i MaxSize;i+)if(bitVectori&!right.bitVectori)return 0;return 1;template class SetList;template class SetNode friend class SetList;public:SetNode(c
8、onst Type&item):data(item),link(NULL);private:Type data;SetNode*link;template class SetList private:SetNode*first,*last;public:SetList();void MakeEmpty();int AddMember(const Type&x);int DelMember(const Type&x);SetList&operator=(SetList&right);SetList&operator+(SetList&right);SetList&operator*(SetLis
9、t&right);SetList&operator-(SetList&right);int Contains(const Type&x);int operator=(SetList&right);Type&Min();Type&Max();template void SetList:SetList()SetNode*first=*last=new SetNode(0);template int SetList:Contains(const Type&x)SetNode*temp=firstlink;while(temp!=NULL&tempdata x)temp=templink;if(tem
10、p!=NULL&tempdata=x)return 1;else return 0;template int SetList:AddMember(const Type&x)SetNode*p=firstlink,*q=first;while(p!=NULL&pdata x)q=p;p=plink;if(p!=NULL&pdata=x)return 0;SetNode*s=new SetNode(x);slink=p;qlink=s;if(p=NULL)last=s;return 1;template int SetList:DelMember(const Type&x)SetNode*p=fi
11、rstlink,*q=first;while(p!=NULL&pdata x)q=p;p=plink;if(p!=NULL&pdata=x)qlink=plink;if(p=last)last=q;delete p;return 1;else return 0;template SetList&SetList :operator=(SetList&right)SetNode*pb=right.firstlink;SetNode*pa=first=new SetNode;while(pb!=NULL)palink=new SetNode(pbdata);pa=palink;pb=pblink;p
12、alink=NULL;last=pa;return*this;template SetList&SetList:operator+(SetList&right)SetNode*pb=right.firstlink;SetNode*pa=firstlink;SetNode*pc=first;while(pa!=NULL&pb!=NULL)if(padata=pbdata)pclink=pa;pa=palink;pb=pblink;else if(padata pbdata)pclink=pa;pa=palink;else pclink=new SetNode(pbdata);pb=pblink;
13、pc=pclink;if(pa!=NULL)pclink=pa;else while(pb!=NULL)pclink=new SetNode(pbdata);pc=pclink;pb=pblink;pclink=NULL;last=pc;return*this;template SetList&SetList:operator*(SetList&right)SetNode*pb=right.firstlink;SetNode*pa=firstlink;SetNode*pc=first;while(pa!=NULL&pb!=NULL)if(padata=pbdata)pc=pclink;pa=p
14、alink;pb=pblink;else if(padata pbdata)pclink=palink;delete pa;pa=pclink;else pb=pblink;while(pa!=NULL)pclink=palink;delete pa;pa=pclink;last=pc;return*this;template SetList&SetList:operator-(SetList&right)SetNode*pb=right.firstlink;SetNode*pa=firstlink;SetNode*pc=first;while(pa!=NULL&pb!=NULL)if(pad
15、ata=pbdata)pclink=palink;delete pa;pa=pclink;pb=pblink;else if(padata pbdata)pc=pclink;pa=palink;else pb=pblink;if(pa=NULL)last=pc;return*this;template int SetList:operator=(SetList&right)SetNode*pb=right.firstlink;SetNode*pa=firstlink;while(pa!=NULL&pb!=NULL)if(padata=pbdata)pa=palink;pb=pblink;els
16、e return 0;if(pa!=NULL|pb!=NULL)return 0;return 1;void equivalence()初始化初始化;while 等价对未处理完等价对未处理完 读入下一个等价对读入下一个等价对(i,j);存储这个等价对存储这个等价对;输出初始化输出初始化;for(尚未输出的每个对象尚未输出的每个对象)输出包含这个对象的等价类输出包含这个对象的等价类;0,1,2,3,4,5,6,7,8,9,10,11 0,4,1,2,3,5,6,7,8,9,10,11 0,4,1,3,2,5,6,7,8,9,10,110,4,1,3,2,5,6,10,7,8,9,11 0,4,1
17、,3,2,5,6,10,7,8,9,11 0,4,7,1,3,2,5,6,10,8,9,11 0,4,7,1,3,2,5,6,8,9,10,11 0,4,7,1,3,5,2,6,8,9,10,110,4,7,1,3,5,2,11,6,8,9,100,2,4,7,11,1,3,5,6,8,9,10void equivalence()读入读入 n;将将 seq 初始化为初始化为 0 且将且将 out 初始化为初始化为 False;while等价对未处理完等价对未处理完 读入下一个等价对读入下一个等价对(i,j);将将 j 链入链入 seqi链表链表;将将 i 链入链入 seqj链表链表;for(i
18、=0;i n;i+)/检测所有对象检测所有对象 if(outi=False)/若对象若对象i未输出未输出 outi=True;/对象对象i做输出标志做输出标志 输出包含对象输出包含对象 i 的等价类的等价类;链链序序号号等等价价 对对OUT初初态态输输出出OUT终终态态 栈栈 0False 0 True 0 11 False 11 True 11 0 4 False 4 True 11,4 4 7 False 7 True 11,7 4 0 True True 11,7 链链序序号号等等价价 对对OUT初初态态输输出出OUT终终态态栈栈 7 4 True True 11 11 0 True T
19、rue 11 0 True True 11 2 False 2 True 2 2 11 True Trueenum Boolean False,True;class ListNode /定义链表结点类定义链表结点类friend void equivalence();private:int data;/结点数据结点数据 ListNode*link;/结点链指针结点链指针 ListNode(int d)data=d;link=NULL;typedef ListNode*ListNodePtr;void equivalence()ifstream inFile(equiv.in,ios:in);/输
20、入文件输入文件 if(!inFile)cout “不能打开输入文件不能打开输入文件 n;/读入对象个数读入对象个数 seq=new ListNodePtrn;out=new Booleann;/初始化初始化seq和和out for(i=0;i i j;/输入等价对输入等价对(i,j)while(inFile.good()/输入文件结束转出循环输入文件结束转出循环 x=new ListNode(j);/创建结点创建结点 j xlink=seqi;seqi=x;/链入第链入第i个链表个链表 y=new ListNode(i);/创建结点创建结点i ylink=seqj;seqj=y;/链入第链入第
21、j个链表个链表 inFile i j;/输入下一个等价对输入下一个等价对 for(i=0;i n;i+)if(outi=False)/未输出未输出,需要输出需要输出 cout endl “A new class:”i;/输出输出 outi=True;/作输出标记作输出标记 ListNode*x=seqi;/取第取第i链表头指针链表头指针 ListNode*top=NULL;/栈初始化栈初始化 while(1)/找类的其它成员找类的其它成员 while(x)/处理链表处理链表,直到直到 x=0 j=xdata;/成员成员j if(outj=False)/未输出未输出,输出输出 cout “,”j
22、;outj=True;ListNode*y=xlink;xlink=top;top=x;/结点结点x进栈进栈 x=y;/x进到链表下一个结点进到链表下一个结点 else x=xlink;/已输出过已输出过,跳过跳过 if(top=NULL)break;/栈空退出循环栈空退出循环 else x=seqtopdata;top=toplink;/栈不空栈不空,退栈退栈,x是根据结点编号回是根据结点编号回 /溯的另一个链表的头指针溯的另一个链表的头指针 delete seq;delete out;;。parent-1 4 -1 2 -1 2 0 0 0 40 1 2 3 4 5 6 7 8 9cons
23、t int DefaultSize=10;class UFSets /public:UFSets(int s=DefaultSize);UFSets()delete parent;const UFSets&operator=(UFSets const&Value);void Union(int Root1,int Root2);int Find(int x);void UnionByHeight(int Root1,int Root2);private:int*parent;int size;UFSets:UFSets(int s)/size=s;parent=new int size+1;f
24、or(int i=0;i=size;i+)parenti=-1;unsigned int UFSets:Find(int x)/搜索操作搜索操作 if(parentx=0)return x;else return Find(parentx);void UFSets:Union(int Root1,int Root2)/并并 parentRoot2=Root1;/Root2指向指向Root1nini12OO)()(parent0(=-4)parent4(=-3)void UFSets:WeightedUnion(int Root1,int Root2)Unionint temp=parentRo
25、ot1+parentRoot2;if(parentRoot2=0;j=parentj);/让让 j 循双亲指针走到根循双亲指针走到根 while(i!=j)/换换 parenti 到到 j int temp=parenti;parenti=j;i=temp;return j;template class dataList;template class Node friend class dataList;public:Node(const Type&value):key(value)Type getKey()const return key;void setKey(Type k)key=k;p
展开阅读全文