- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
跳表的操作符重载classelement{friendvoidmain(void);public: operatorlong()const{returnkey;} elementoperator=(longy) {key=y;return*this;}private: intdata; longkey;};在跳表中搜索templateclassE,classKboolSkipListE,K::Search(constKk,Ee)const{//搜索与k相匹配的元素,并将所找到的元素放入e//如果不存在这样的元素,则返回falseif(k=TailKey)returnfalse;//调整指针p,使其恰好指向可能与k匹配的节点的前一个节点SkipNodeE,K*p=head;for(inti=Levels;i=0;i--)//逐级向下 while(p-link[i]-datak)//在第i级链中搜索 p=p-link[i];//指针//检查是否下一个节点拥有关键值ke=p-link[0]-data;return(e==k);}跳表SkipList当跳表中有n个元素时,搜索、插入、删除操作的复杂性均为O(n+MaxLevel)。在最坏情况下,可能只有一个MaxLevel级元素,且余下的所有元素均在0级链上。i>0时,在i级链上花费的时间为(MaxLevel),而在0级链上花费的时间为O(n)。尽管最坏情况下的性能较差,但跳表仍不失为一种有价值的数据描述方法。其每种操作(搜索、插入、删除)的平均复杂性均为O(logn),其证明超出了本书的范围。跳表SkipList至于空间复杂性,注意到最坏情况下所有元素都可能是MaxLevel级,每个元素都需要MaxLevel+1个指针。因此,除了存储n个元素(也就是n*sizeof(element)),还需要存储链指针(所需空间为O(n*MaxLevel))。不过,一般情况下,只有n*p个元素在1级链上,n*p2个元素在2级链上,n*pi在i级链上。因此指针域的平均值(不包括头尾节点的指针)是因此虽然最坏情况下空间需求比较大,但平均的空间需求并不大。当p=0.5时,平均空间需求(加上n个节点中的指针)大约是2n个指针的空间。删除方案实现删除的另一种策略是为每个桶增加一个NeverUsed域。在表初始化时,该域被置为true。当桶中存入一个元素时,NeverUsed域被置为false。这时搜索的结束条件2)变成:桶的NeverUsed域为true。实现删除时,只需把表中相应位置置为空即可。一个新元素可被插入到从其对应的起始桶开始所找到的第一个空桶中。注意在这种方案中,NeverUsed不会被重置为true。用不了多长时间,所有的(或几乎所有的)桶的NeverUsed域均会被置为false,这时搜索过程可能需要检查所有的桶。在这种情况下,为了提高性能,必须重新组织该表******************************************************************************删除方案在完成一次删除操作后,必须能保证上述的搜索过程仍能够正常进行。例:删除58。不能仅把4号桶置为空,否则就无法找到关键字为35的元素。删除会带来多个元素的移动。**删除方案可从欲删除的元素开始逐个检查每个桶以确定要移动的元素,直到到达一个空桶或到达删除操作所对应的桶为止。**散列表的C++类定义templateclassE,classKclassHashTable{public: HashTable(intdivisor=11); ~HashTable(){delete[]ht;delete[]empty;} boolSearch(constKk,Ee)const; HashTableE,KInsert(constEe);private: inthSearch(constKk)const; intD;//散列函数的除数 E*ht;//散列数组 bool*empty;//一维数组,标示桶是否为空};**HashTable的构造函数templateclassE,classKHashTableE,
原创力文档


文档评论(0)