- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 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)