网站大量收购独家精品文档,联系QQ:2885784924

循环链表及双向链表.pptVIP

  1. 1、本文档共38页,可阅读全部内容。
  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文档。上传文档
查看更多
循环链表及双向链表

目 录;5.1几种特殊线性链表 ;5.2 循环链表 ;5.3 双向链表 ;循环单链表是单链表的另一种形式,其结构特点是链表中最后一个结点的指针不再是结束标记,而是指向整个链表的第一个结点,从而使单链表形成一个环。和单链表相比,循环单链表的长处是从链尾到链头比较方便。当要处理的数据元素序列具有环型结构特点时,适合于采用循环单链表。循环链表的插入、删除运算基本同单向链表,只是查找时判别条件不同而已;但是这种循环链表实现各种运算时的危险之处在于:链表没有明显的尾端,可能使算法进入死循环,所以判断条件应该用curr.next()!=head替换单向链表的curr.next()!=null完成遍历所有结点。;(一)双链表的插入 ;(2);5.4 线性表应用示例 ;A-B;long DiDiff(TLinearListSqulong a, TLinearListSqulong b) {//将a中的出现在b中的元素删除,返回从a中删除的元素的数 //目 a和b都是前面定义的线性表类,元素类型实例化为long。 long i,j, k; j=0; for (i=0; ib.len; i++) //扫描b { k = a.Locate(b.Get(i), 1); //依次检查b中每个元素是否在a中 if (k 0 ) //如在a中,则从a中将其删除 {a.Delete(k+1); j--;} Else{ a.Insert(b.Get(i),1);j++} } return j; };5.5一元多项式相加 ; 为解决0系数问题,可以不存贮0值元素。但这样就不能利用位置关系隐含指出系数对应的指数了,而必须显式地给出指数。 对任一个一元n次多项式,若不写出系数为0的项,则可表示为      pn(x) = p1xe1+p2xe2+ … +pnxen 这里,p1, p2, … , pn均非0,e1e2 … en=n。 显然,对此形式多项式,可确定地用下列形式的线性表表示      ((p1,e1), (p2,e2), …, (pn,en) ) 该线性表每个元素是个二元组(pi,ei),分别指出第i个非0项的系数和指数,二元组按指数递增的次序排列。在这种结构中,元素之间的次序关系仅代表元素对应的指数的大小关系。;对这种线性表,既可用顺序存贮结构,也可用链式存贮结构。但考虑到在进行符号加法时,要经常进行插入与删除操作,所以采用链式存贮结构较为合适。这里,我们采用动态链式存贮结构,线性表每个元素的结构为 ;为处理方便,在具体存储多项式时,我们规定: 所存储的多项式已约简,即已合并同类项,不保留0系数项,各项按指数的升序排列。 ; 一元n次多项式的(符号)相加,实质上是合并同类项的过程,即指数相同的项,其系数相加,指数不同的项复抄。;(1)若p→expq→exp, 则结点p应为和的一个结点,故p后移一步,q 不动。 (2)若p→expq→exp ,则结点q应为和的一个结点,故应将q 从B(x)中摘除后插入到A(x)中p之前,然后q向后移一步,p 不动。 (3)若p→exp=q→exp,则表明p与q 所指为同类项,应合并,故要将q的系数加到p的系数上。若相加结果为0,则表明和式中无此项,故应从A(x) 中删除p,从B(x) 中删除q,并令p 与q 分别指向下一结点。若相加和不为0,则表明相加结果应为和式中的一个结点,p 后移一步,然后将q从B(x) 中摘除,令q指向下一结点。;下面先给出算法的伪码。 p=A的第一个元素; q=B的第一个元素; while (p存在 q存在) { if (p的指数 q的指数) { p0 = p; p = p-next; };else if (p的指数 q的指数) { 将q插入到p之前; 令p0指向插入后的q,即p的当前前驱; 令q指向它原所指的下一个结点; } else { x = p的系数 + q的系数之和; if (x==0) {;删除p; 使p指向它原指结点的下一个; } else { 令p的系数为x; 使p指向它原指结点的下一个; } 删除q; 使q指向它原指结点的下一个; } // if (p的指数 q的指数) … else } //while if (q不为空) 将q挂接在p之后; ;该程序不断比较A链和B链中的一对结点的指数值(称其为当前结点)。开始时A链和B链中参加比较的当前结点都是它们的第一个元素。 主循环while结束后,可能出现下列3种情况:①A链

文档评论(0)

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

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

1亿VIP精品文档

相关文档