算法与数据结构(c语言)集合与字典.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文档。上传文档
查看更多
算法与数据结构(c语言)集合与字典

第六章 集合与字典 目录 6.1 集合及其抽象数据类型 6.1.1 基本概念 6.1.2 主要运算 6.1.3 抽象数据类型 6.2 集合的实现 6.2.1 集合的位向量表示 6.2.2 集合的单链表表示 6.3 字典及其抽象数据类型 6.3.1 基本概念 6.3.2 抽象数据类型 6.4 字典的顺序表示 6.4.1 存储结构 6.4.2 算法的实现 6.4.3 有序顺序表 与二分法检索 6.5 字典的散列表示 6.5.1 基本概念 6.5.2 散列函数 6.5.3 碰撞的处理 6.5.4 散列文件 6.1 集合及其抽象数据类型 6.1.1 基本概念 6.1.2 主要运算 集合也可以定义测试一个元素是否存在于集合中、增加一个元素、删除一个元素等运算,但集合更加关心下面的一些运算。 求并集: 求交集: 求差集: 子集: A是B的子集 如果集合A是B的子集,反过来也称集合B是A的超集。 相等: 例如:若A={a,b,c},B={b,d},则有A∪B={a,b,c,d},A∩B={b},A-B={a,c}。另外,A不等于B,同时A和B相互都不是子集关系。 …… 上面集合间的运算,都可以通过增加元素、删除元素和成员测试等运算来实现。 例如: 已知集合A和B,求它们的并集,只要以集合A(或B)为基础,把集合B(或A)的元素逐个插入。 如果要求两个集合的交集,只要从A(或B)出发,检查各元素是否在B(或A)中出现,把那些也在另一个集合里出现的元素插入(初态为空集)的集合中即可。 求A与B的差集A?B时,只要以A为基础,对每个B中的元素做删除运算即可。 6.1.3 抽象数据类型 6.2 集合的实现 位向量表示 单链表表示 6.2.1 位向量表示 存储结构 算法实现 位运算 假设x和y都是8位的字符,其值分别是: X= Y= 对x和y做各种字位运算,得到的结果如下: ~x x y x ^ y x | y x 3 y 5 空集合的创建 与空顺序表的的创建类似,不同之处在于这里省略了每个集合中实际元素个数的变量: BitSet * createEmptySet (int n) 将整数index的元素插入集合 将值为index的元素插入集合S的过程,通过将位向量中下标为index的位置为1来完成: int insert (BitSet * s, int index) 将整数index的元素从集合中删除 通过将位向量中下标为index的位置为0来完成: int delete(BitSet * s, int index) 判断整数index的元素是否属于集合 通过判断位向量中下标为index的位是否为1来完成: int member(BitSet * s, int index) 集合与集合的并 利用按位的“或”运算实现: int union (BitSet * s0, BitSet * s1, BitSet * s2) 集合与集合的交 这个运算很容易通过位“与”操作实现。 int intersection(BitSet * s0, BitSet * s1, BitSet * s2) 集合与集合的差 将第一个集合与第二个集合的逆做与运算,就可以达到这个目的。 int difference(BitSet * s0, BitSet * s1, BitSet * s2) 6.2.2 单链表表示 存储结构 链表中的每个结点表示集合中的一个元素,具体方式与第二章单链表的结点struct Node类似。 不同之处在于:线性表的单链表中,link字段表示线性表元素之间的逻辑后继关系,而在这里仅仅是把属于同一集合的所有元素链接成一个整体。 因为我们讨论的是有序集,如果将集合中的所有元素按“<”关系排序构造有序链表,给集合的某些运算会带来方便。 求单链表表示集合的交集 集合的赋值 int assignLink (LinkSet s0,LinkSet s1) 赋值运算将集合s0拷贝成集合s1,注意这一运算不能简单地将s0的表头结点置成s1的表头结点,因为若这样处理,则对s1的改变将会带来s0的改变。 程序实现 插

文档评论(0)

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

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

1亿VIP精品文档

相关文档