算法与数据结构[c语言]第六章集合与字典.ppt

算法与数据结构[c语言]第六章集合与字典.ppt

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

第六章 集合与字典 ;目录;6.1 集合及其抽象数据类型 6.1.1 基本概念 ;列举法: 定义一个有穷集,可以将成员放在一对花括号中,成员之间用逗号隔开。 例如{1,2,4} 谓词描述法: 集合的大小: 集合中所包含的元素的个数。 空集 子集 超集 数据结构中讨论的集合,一般有以下限制: 1)数据结构讨论的集合总限制为有穷集; 2)假定集合中所有元素属同一类型;并且假设元素之间存在一个小于关系“<”,也称为有序集。 ;6.1.2 主要运算; 上面集合间的运算,都可以通过增加元素、删除元素和成员测试等运算来实现。 ;6.1.3 抽象数据类型 ;int delete(Set A,DataType x) 将x从A中删除,如果x本来就不在A中,则不改变A。 int union(Set A,Set B,Set C) 求集合A和B的并集,结果在集合C中。 int intersection (Set A,Set B,Set C) 求集合A和B的交集,结果在集合C中。 int difference(Set A,Set B,Set C) 求集合A和B的差集,结果在集合C中。 int subset(Set A,Set B) 当且仅当A是B的子集时,函数值才为真。 end ADT Set ;6.2 集合的实现 ;6.2.1 位向量表示 ;假设需要表示的集合的公共超集中,共有n个不同的元素,为叙述的方便,不妨假设这些元素就是整数0,1,2,…,n-1等。 每个集合可以采用一个有n位的位向量来表示。若整数i是这个集合的一个元素,则位向量中对应的位为1(真),否则为0(假)。 ;由于在C语言中无法直接定义位数组,要定义位向量,需要借助其它方式。一种比较自然的方式,是用长度为n/8的字符数组表示长度为n的字位数组。一个字符用8位二进制编码,它实际上包含了8个二进制位。 ;位向量表示集合的存储结构: typedef struct { int size; /*字符数组的长度*/ char * array; /*位向量空间。每一数组元素保存8位。*/ } BitSet; ;下图给出了一个公共超集是从0到9的整数集合,采用位向量表示的存储结构示意图。 从图中可以看出每个整数所对应的二进制位的位置。当集合S={1,3,5,7,9}时,它的实际存储状态如图(b)所示(注意其中元素的排列方法)。 用位向量表示集合时,所占空间??大小与公共超集的大小n成正比,而与要表示的集合的大小无关。 ;;算法实现;位运算;空集合的创建 与空顺序表的的创建类似,不同之处在于这里省略了每个集合中实际元素个数的变量: BitSet * createEmptySet (int n) 将整数index的元素插入集合 将值为index的元素插入集合S的过程,通过将位向量中下标为index的位置为1来完成: int insert (BitSet * s, int index) ;;;;6.2.2 单链表表示 ;存储结构;struct Node; typedef struct Node *PNode; struct Node { DataType info; PNode link; }; typedef struct Node *LinkSet; ;集合S={0,1,2,…,n-1}采用带表头结点的有序链表表示时,如图所示: ;求单链表表示集合的交集 ;集合的赋值 int assignLink (LinkSet s0,LinkSet s1) 赋值运算将集合s0拷贝成集合s1,注意这一运算不能简单地将s0的表头结点置成s1的表头结点,因为若这样处理,则对s1的改变将会带来s0的改变。 程序实现;; 6.3 字典及其抽象数据类型 6.3.1基本概念;在实践中使用较多的字典里所有的关键码互不相同,这种关键码具有唯一性的字典,在数学中称为映射(mapping),数据结构里讲的就是这种字典。 字典关心的最主要的运算是检索。 衡量一个字典检索算法效率的主要标准是检索过程中对关键码的平均比较次数: 以及算法的空间开销、算法是否易于理解等因素。;6.3.2 抽象数据类型;ADT Dictionary is operations Dictionary createEmptyDictionary ( void ) 创建一个空字典。 int search(Dictionary dic, KeyType key, Position p) 在字典dic中检索关键码为key的关联的位置p。 int insert(Dictionary dic, DicElement

文档评论(0)

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

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

1亿VIP精品文档

相关文档