第02章 基本数据结构及其运算-03链表表.pptVIP

 第02章 基本数据结构及其运算-03链表表.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
在静态链表第 i 个结点处插入一个新结点 int Insert ( SLinkList SL, int i, ListData x ) { int p = Locate ( SL, i-1 ); if ( p == -1 ) return 0; //找不到结点 int q = SL.newptr; //分配结点 SL.newptr = SL.Nodes[SL.newptr].link; SL.Nodes[q].data = x; SL.Nodes[q].link = SL.Nodes[p].link; SL.Nodes[p].link = q; //插入 return 1; } 在静态链表中释放第 i 个结点 int Remove ( SLinkList SL, int i ) { int p = Locate ( SL, i-1 ); if ( p == -1 ) return 0; //找不到结点 int q = SL.Nodes[p].link; //第 i 号结点 SL.Nodes[p].link = SL.Nodes[q].link; SL.Nodes[q].link = SL.newptr; //释放 SL.newptr = q; return 1; } 循环链表 (Circular List) 特点:最后一个结点的 link 指针不为NULL,而是指向头结点。只要已知表中某一结点的地址,就可搜寻所有结点的地址。 存储结构:链式存储结构 带表头结点的循环链表 an-1 first a1 a0 first (空表) (非空表) 循环链表的插入 约瑟夫问题 用循环链表求解约瑟夫问题 n 个人围成一个圆圈,首先第2个人从1开始一个人一个人顺时针报数, 报到第m个人,令其出列。然后再从下一个人开始,从1顺时针报数,报到第m个人,再令其出列,…,如此下去, 直到圆圈中只剩一个人为止。此人即为优胜者。 例如 n = 3 m = 8 约瑟夫问题的解法 #include iostream.h #include “CircList.h” void Josephus ( int n, int m ) { for ( int i=0; in-1; i++ ) { //执行n-1次 for ( int j=0; jm-1; j++ ) Next ( ); cout “Delete person ” getData ( ) endl; //数m-1个人 Remove ( ); //删去 } } void main ( ) { CircListint clist; int n, m; cout “Enter the Number of Contestants?”; cin n m; for ( int i=1; i=n; i++ ) clist.insert (i); //形成约 瑟夫环 clist.Josephus (n, m); //解决约瑟夫问题 } 多项式及其相加 在多项式的链表表示中每个结点增加了一个数据成员link,作为链接指针。 优点是: 多项式的项数可以动态地增长,不存在存储溢出问题。 插入、删除方便,不移动元素。 多项式链表的相加 AH = 1 - 10x6 + 2x8 +7x14 BH = - x4 + 10x6 - 3x10 + 8x14 +4x18 Polynomial operator + ( const Polynomial ah, const Polynomial bh ) { Term *pa, *pb, *pc, *p; ListIteratorElement Aiter ( ah.poly ); ListIteratorElement Biter ( bh.poly ); //建立两个多项式对象 Aiter、 Biter pa = pc = Aiter.First ( ); // pa 检测指针 pb = Biter.First ( ); // pb 检测指针 pa = Aiter.Next ( ); pb = Biter.Next( );

文档评论(0)

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

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

1亿VIP精品文档

相关文档