数据结构——跳舞链.pptVIP

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

循环链表 把链接结构“循环化”,即把表尾结点的next域存放指向哨位结点的指针,而不是存放空指针NULL,这样的单链表被称为循环链表。 循环链表使我们可从链表的任何位置开始,访问链表中的任一结点。 循环链表状态和操作 空表:head-next == head 表尾:p-next == head 其操作和单链表类似 约瑟夫问题 据说著名犹太历史学家 Josephus有过以下的故事:在罗马人占领乔塔帕特后,39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自杀方式。41个人排成一个圆圈,由第1个人开始报数,每报数到第3人该人就必须自杀,然后再由下一个重新报数,直到所有人都自杀身亡为止。然而Josephus 和他的朋友并不想遵从。他将朋友与自己安排在第16个与第31个位置,于是逃过了这场死亡游戏。 简化版本 N个人围成一圈,从第一个开始报数,第M个将被杀掉,最后剩下一个,其余人都将被杀掉。例如N=6,M=5,被杀掉的人的序号为5,4,6,2,3。最后剩下1号。 最后剩下的是谁? 双向链表 所谓双向链表(Double-Linked List),系指链表中任一结点P都是由data域、左指针域left和右指针域right构成的,左指针域和右指针域分别存放P的前驱和后继结点的地址信息。 链表中表头结点的left指针和表尾结点的right指针均为NULL. 双向链表结点的结构 template class T Struct DLNode{ T data; DLNodeT *left, *right ; DLNode ( ) { left = right = NULL ; } ; // 构造函数 DLNode ( const T item, SLNode * L = NULL, SLNode * R = NULL ) { data = item ; left = L; right = R ; } // 构造函数 }; 插入算法 p - left = s; p - right = s-right; p - left - right = p; p - right - left = p; 插入算法的ADL描述 算法DLInsert(s , p)// 在结点s的右边插入结点p DLI1.[ right (s) ? ?] // 若结点s是尾结点 IF right (s) ? ? THEN ( (left (p) ? s. right (p) ?? . left(right (p))?p. RETURN. ) DLI2. [插入] left(p) ? s. right(p) ? right(s). right(left(p)) ? p . left(right(p)) ? p . ? 删除算法 s - left - right = s-right; s - right - left = s-left; delete s; 删除算法的ADL描述 算法DeleteNode(s)// 删除结点s DN1.[left (s) ? right (s) ? ?] // 双向链表中只有一个结点 IF left (s) ? right (s) ? ? THEN ( head ? tail ? ? . GOTO DN5 ). DN2.[left (s) ? ?] // s是头结点 IF left (s))? ? THEN ( left (right (s)) ?? . head? right (s) . GOTO DN5 ). DN3.[right (s) ? ?] // s是尾结点 IF right (s))? ? THEN ( right (left (s)) ? ? . tail ? left (s) . GOTO DN5 ). DN4.[ left (s) ≠ ? and right (s) ≠ ? ] right (left (s)) ? right (s) . left (right (s)) ? left (s). DN5.[ AVAIL? s ] AVAIL? s.? 跳舞链 带哨兵变量的双向循环链表:跳舞链 表头:head-right 表尾:head-left 空表:head-left== head 或者 head-right==head 插入 void inse

文档评论(0)

dajuhyy + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档