- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构A ·第6章 第6章 集合与搜索 内容提要 1、集合的基本概念 2、定义动态集ADT 3、集合的表示形式 4、顺序搜索 5、二分搜索 6.1 基本概念 (a) 集合结构 (b) 线性结构 (c) 树形结构 (d) 图状结构 图1-2 四种基本的结构关系 课堂提要 第6章 集合与搜索 6.1 基本概念 6.2 顺序搜索 6.3 二分搜索 集合结构(简称集合)作为一种数据结构,我们将它视为同类型数据元素的汇集。集合的数据元素之间除了“同属于一个集合”的联系之外没有其它关系。一般地,我们假定所讨论的集合不包含相同元素。 6.1 基本概念 6.1.1 集合与搜索 1.集合 (1)基本概念 集合:在数学上,集合是不同对象的无序汇集。 例如:集合{1,2,3}与{3,2,1}相同。 元素:集合的对象。在集合中,每个元素仅出现一次。 多重集:元素的无序汇集,其中每个元素可出现一次或多次。 无序集:通常用{ }表示。 例如:多重集{1,1,2,3}与{3,2,1,1}相同, 但与集合{1,2.3}不同 。 有序集:元素的汇集,其中每个元素可以出现一次或多次,并 且出现次序是重要的。通常用( )表示有序集。 例如:(1,2,3)与(3,2,1)不同。 6.1 基本概念 6.1.1 集合与搜索 1.集合 (2)集合的运算 数学意义上,集合运算主要有: 求集合的并 求集合的差 求集合的交 判断两集合是否相等 6.1 基本概念 6.1.1 集合与搜索 2.动态集 (1)动态集:在数据结构意义上,集合通常是动态的,在集合中可以插入和删除元素,因而称为动态集。 (2)集合元素定义 templateclass K, class D Struct E { operator K() const{return key;} //使元素间的比较视为关键字间的比较 K key; D data; }; 其中,K称为关键字类型,应为可比较大小的类型。 key为关键字:用来标识一个数据元素的某个数据项。 6.1 基本概念 6.1.1 集合与搜索 3.搜索运算 当信息量较少,整个集合元素都存放在内存中,称为表。否则,称为文件。搜索运算是表和文件上的最典型运算。 搜索:根据给定的某个值,在表中确定一个关键字值等于给定值的数据元素。 6.1 基本概念 6.1.1 集合与搜索 4.搜索算法分类按元素是否在内存,分为: 内搜索:对表的搜索 外搜索:对文件的搜索 按关键字的比较情况,分为: 基于关键字比较的搜索,此类搜索将在第7章介绍 基于计算地址的搜索,此类搜索将在第8章介绍 6.1 基本概念 6.1.2 动态集ADT ADT 6.1 动态集抽象数据类型 ADT DynamicSet{ 数据: 同类元素的有限汇集,其最大允许长度为MaxSetSize。元素由关键字标识,集合的元素各不相同。 运算: Create():创建一个空集合。 Destroy():撤消一个集合。 IsEmpty():若集合空,则返回true,否则返回false。 IsFull():若集合满,则返回true,否则返回false。 Search(x):在集合中搜索与x的关键字值相同的元素。如果存在该元素,则将其值赋给x,并且函数返回Success;否则返回NotPresent。 Insert(x): 在集合中搜索与x的关键字相同的元素。若集合中存在该元素,则将其值赋给x,函数返回Duplicate。否则,若集合已满,则函数返回Overflow;若集合未满,则在表中插入值为x的元素,函数返回Success。 Remove(x): 在集合中搜索与x的关键字值相同的元素。如果存在该元素,则将其值赋给x,并从集合中删除之,函数返回Success;否则返回NotPresent。} 6.1 基本概念 6.1.2 动态集ADT 程序6.1 动态集的C++模板抽象类 template class T class DynamicSet{ public: virtual ResultCode Search(T& x) const=0; virtual ResultCode Insert(T& x)=0; virtual ResultCode Remove(T& x)=0; virtual bool IsEmpty() const=0; virtual bool IsFull() const=0; }; 其中,函数返回类型ResultCode为枚举类型: Enum ResultCode{Su
文档评论(0)