数据结构、算法与应用II.ppt

  1. 1、本文档共612页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构、算法与应用 C++描述 第7章 跳表和散列 字典(Dictionaries ) 线性表描述(Linear List Representation) 跳表描述(Skip List Representation) 散列表描述(Hash Table Representation) 本章重点 字典的描述 跳表思想 散列思想和实现 字典 字典是一些元素的集合。每个元素有一个称作key的域,不同元素的key各不相同。 有关字典的操作有: ? 插入具有给定关键字值的元素。 ? 寻找具有给定关键字值的元素。 ? 删除具有给定关键字值的元素。 字典ADT 抽象数据类型Dictionary { 实例 具有不同关键字的元素集合 操作 Create():创建一个空字典 Search(k, x):搜索关键字为k的元素,结果放入x;如果没找到,则返回false,否则返回true Insert(x):向字典中插入元素x Delete(k, x):删除关键字为k的元素,并将其放入x } 字典的线性表描述 字典可以保存在线性序列(e1,e2 , …) 中,其中ei是字典中的元素,其关键字从左到右依次增大。 公式化描述 搜索:可以折半,对有n个元素的字典进行搜索的时间为O(logn)。 插入:首先确认该字典中没有相同关键字的元素,这要通过搜索来实现。然后进行插入,此时要为新元素腾出空间而移动表中O(n)个元素,故插入操作的时间是O(n)。 删除:首先要找到欲删除的元素,然后再进行删除。在进行搜索之后,还要移动O(n)个元素以填补所删除元素的空间,因此删除的时间复杂性为O(n)。 链表描述 templateclass E ,class K//E:链表元素,K:关键字。 class SortedChain{ public: SortedChain() {first =0;} ~SortedChain ( ) ; bool IsEmpty() const {return first ==0;} int Length() const; bool Search(const K k , E e) const; SortedChainE ,K Delete(const K k , E e); SortedChainE ,K Insert(const E e); SortedChainE ,K DistinctInsert(const E e); private: SortedChainNodeE ,K *first; } ; Search templateclass E, class K bool SortedChainE,K::Search(const K k, E e) const {// 搜索与k匹配的元素,结果放入e // 如果没有匹配的元素,则返回false SortedChainNodeE,K *p = first; // 搜索与k相匹配的元素 for (; p p-data k;p = p-link); // 验证是否与k匹配 if (p p-data == k) // 与k相匹配 {e = p-data; return true;} return false; // 不存在相匹配的元素 } Delete templateclass E, class K SortedChainE,K SortedChainE,K ::Delete(const K k, E e) {// 删除与k相匹配的元素 //并将被删除的元素放入e // 如果不存在匹配元素,则引发异常BadInput SortedChainNodeE,K *p = first,*tp = 0; //跟踪p,搜索与k相匹配的元素 for (; p p-data k; tp = p,p = p-link); Delete // 验证是否与k匹配 if (p p-data == k){//找到一个相匹配的元素 e = p-data; // 保存data域 // 从链表中删除p所指向的元素 if (tp) tp-link = p-link; else first = p-link; // p是链首节点 delete p; return *this;} throw BadInput(); // 不存在相匹配的元素 } DistinctInsert templateclass E, class K SortedChainE,K SortedChainE,K::DistinctInsert(const E e) {//如果表中不存在关键值与e相同的元素,则插入e / /否则引发异常BadInput SortedChainNodeE,K *p =

文档评论(0)

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

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

1亿VIP精品文档

相关文档