数据结构2-线性表精品.pptVIP

  1. 1、本文档共74页,可阅读全部内容。
  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文档。上传文档
查看更多
2 一元多项式的相加 不失一般性,设有两个一元多项式: P(x)=p0+p1x+p2x2+ … +pnxn , Q(x)=q0+q1x+q2x2+ … +qmxm (mn) R(x)=P(x)+ Q(x) R(x)由线性表R((p0+q0) ,(p1+q1) ,(p2+q2) , … ,(pm+qm) , … , pn)唯一表示。 ⑴ 顺序存储表示的相加 线性表的定义 typedef struct { ElemType a[MAX_SIZE] ; int length ; }Sqlist ; 用顺序表示的相加非常简单。访问第5项可直接访问:L.a[4].coef , L.a[4].expn (2) 链式存储表示的相加 当采用链式存储表示时,根据结点类型定义,凡是系数为0的项不在链表中出现,从而可以大大减少链表的长度。 一元多项式相加的实质是: 指数不同: 是链表的合并。 指数相同: 系数相加,和为0,去掉结点,和不为0,修改结点的系数域。 算法之一: 就在原来两个多项式链表的基础上进行相加,相加后原来两个多项式链表就不在存在。当然再要对原来两个多项式进行其它操作就不允许了。 算法描述 Ploy *add_ploy(ploy *La, ploy *Lb) /* 将以La ,Lb为头指针表示的一元多项式相加 */ { ploy *Lc , *pc , *pa , *pb ,*ptr ; float x ; Lc=pc=La ; pa=La-next ; pb=Lb-next ; while (pa!=NULLpb!=NULL) { if (pa-expnpb-expn) { pc-next=pa ; pc=pa ; pa=pa-next ; } /* 将pa所指的结点合并,pa指向下一个结点 */ if (pa-expnpb-expn) { pc-next=pb ; pc=pb ; pb=pb-next ; } /* 将pb所指的结点合并,pb指向下一个结点 */ else { x=pa-coef+pb-coef ; if (abs(x)=1.0e-6) /* 如果系数和为0,删除两个结点 */ { ptr=pa ; pa=pa-next ; free(ptr) ; ptr=pb ; pb=pb-next ; free(ptr) ; } else /* 如果系数和不为0,修改其中一个结点的系数域,删除另一个结点 */ { pc-next=pa ; pa-coef=x ; pc=pa ; pa=pa-next ; ptr=pb ; pb=pb-next ; free(pb) ; } } } /* end of while */ if (pa==NULL) pc-next=pb ; else pc-next=pa ; return (Lc) ; } 算法之二: 对两个多项式链表进行相加,生成一个新的相加后的结果多项式链表,原来两个多项式链表依然存在,不发生任何改变,如果要再对原来两个多项式进行其它操作也不影响。 算法描述 Ploy *add_ploy(ploy *La, ploy *Lb) /* 将以La ,Lb为头指针表示的一元多项式相加,生成一个新的结果多项式 */ { ploy *Lc , *pc , *pa , *pb , *p ; float x ; Lc=pc=(ploy *)malloc(sizeof(ploy)) ; pa=La-next ; pb=Lb-next ; while (pa!=NULLpb!=NULL) { if (pa-expnpb-expn) { p=(ploy *)malloc(sizeof(ploy)) ; p-coef=pa-coef ; p-expn=pa-expn ; p-next=NULL ; /* 生成一个新的结果结点并赋值 */ pc-next=p ; pc=p ; pa=pa-next ; } /* 生成的结点插入到结果链表的最后,pa指向下一个结点

文档评论(0)

挑战不可能 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档