第六章集合与字典(一)说课.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第六章 集合与字典 集合及其表示 并查集与等价类 字典 跳表 散列 集合及其表示 集合是成员(元素)的一个群集。集合中的成员可以是原子(单元素),也可以是集合。 集合的成员必须互不相同(注:多重集合multiset允许重复元素)。 在算法与数据结构中所遇到的集合,其单元素通常是整数、字符、字符串或指针,且同一集合中所有成员具有相同的数据类型。 例:colour = { red, orange, yellow, green, black, blue, purple, white } 集合中的成员一般是无序的,但在表示它时,常写在一个序列里。 常设定集合中的元素具有线性有序关系,此关系可记作“”,表示“优先于”。 整数、字符和串都有一个自然线性顺序。指针也可依据其在序列中安排的位置给予一个线性顺序。 在某些集合中保存实际数据值,某些集合中保存标示元素是否在集合中的指示信息。如学校开设的所有课程的编码属于前者,一个学期开设的课程构成的集合属于后者。 集合(Set)的抽象数据类型 template class T class Set { public: virtual Set() = 0; //构造函数 virtual makeEmpty() = 0; //置空集合 virtual bool addMember (const T x) = 0; virtual bool delMember (const T x) = 0; virtual SetT intersectWith (SetT R) = 0; //集合的交运算 virtual SetT unionWith (SetT R) = 0; //集合的并运算 virtual SetT differenceFrom (SetT R) = 0; //集合的差运算 virtual bool Contains (T x) = 0; virtual bool subSet (SetT R) = 0; virtual bool operator == (SetT R) = 0; //判集合是否相等 }; 用位向量实现集合抽象数据类型 当集合是全集合 { 0, 1, 2, …, n } 的一个子集,且 n 是不大的整数时,可用位(0, 1)向量来实现集合。 当全集合是由有限个可枚举的成员组成时,可建立全集合成员与整数 0, 1, 2, …的一一对应关系,用位向量来表示该集合的子集。 一个二进位两个取值1或0,分别表示在集合与不在集合。 template class T bool bitSetT::subSet (bitSetT R) { //判this是否R的子集 assert (setSize == R.setSize); for (int i = 0; i vectorSize; i++) //按位判断 if (bitVector[i] !R.bitVector[i]) return false; return true; }; template class T bool bitSetT::operator == (bitSetT R) { //判集合this与R相等 if (vectorSize != R.vectorSize) return false; for (int i = 0; i vectorSize; i++) if (bitVector[i] != R.bitVector[i]) return false; return true; //对应位全部相等 }; 用有序链表实现集合抽象数据类型 用有序链表来表示集合时,链表中的每个结点表示集合的一个成员。 各结点所表示的成员 e0, e1, …, en 在链表中按升序排列,即 e0 e1 … en。 集合成员可以无限增加。因此,用有序链表可以表示无穷全集合的子集。 集合的有序链表类的定义 template class T struct SetNode { //集合的结点类定义 T data; //每个成员的数据 SetNodeT *link; //链接指针 SetNode() : link (NULL); //构造函数 SetNode (const T x, SetN

文档评论(0)

w5544434 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档