多项的式相加相乘链表实现.docVIP

  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文档。上传文档
查看更多
多项的式相加相乘链表实现

实验一:两个多项式相加相乘链表实现 学生姓名:# 班级:@12 学号: 完成时间:2015.06.25 本人郑重声明:本实验的程序代码编写与调试、实验报告的撰写均由本人独立完成,如被发现抄袭或与其他同学作业雷同,同意取消该实验成绩! 声明人:# 2015.06.25 【实验内容】 设计构造两个链式线性表,用来表示两个一元多项式 程序允许用户手工输入这两个线性表,每个线性表中的每个数据元素包含两个值,系数Pi和幂qi;输入方式自定; 程序对两个多项式进行相加,然后输出一个相加后的一元多项式。 两个多项式相乘(选做)。 【编程思路】 创建链表: 先分别输入两个多项式的项数以及调用Createlist()函数按降幂顺序输入各项的系数和次数,构建出两个多项式的链表。两个多项式的系数和次数同样按降幂顺序存入两个线性表a、b中,头结点分别为head_a,head_b。 多项式相加: 创建一个新链表,作为相加后所得结果的多项式的链表寄存处。定义两个临时链表节点指针pa和pb,分别指向两个链表头结点的下一位(注:链表的头结点不存项)。通过比较两个多项式的首项确定最高次幂,用max_qi记录。然后用一个for循环从两个链表中寻找,判断pa和pb当前位置有无次数为i(i为循环变量)的项,有则合并同类项。如果pa、pb次数等于i,两对应系数相加,和其系数一起存入新节点中,再将新节点插入新链表中,pa、pb随后后移一个单位;如果pa的次数小于i,pb次数等于i,则只加pb项,也存入新节点并插入新链表中,随后pb向后移动一个单位;如果pb的次数小于i,pa次数等于i,处理方法与上一种情况类似。如果pa和pb次数均小于i,则i减小1,进入下一次循环,再作比较。若pa或pb为空,则将不为空的多项式链表的剩余项逐一赋给新链表即可。 多项式相乘: 创建一个新链表,作为相乘后所得结果的多项式的链表寄存处。定义两个临时链表节点指针pa和pb,分别指向两个链表头结点的下一位。通过将两个多项式的首项次数相加确定乘积的最高次幂,用qi_max记录。将链表b(pb所指链表)倒置,使b链表各项按升序排列。然后用一个for循环从两个链表中按顺序逐一寻找各项指数,看其两项的指数和是否等于循环变量k。若相等,则将两者系数相乘,加入变量pi(初始时为0)中,然后pa、pb各自后移一个单位,再判断指数和是否为k。若指数和小于k,则pb往后移一个单位,再判断;若指数和大于k,则pa往后移一个单位,再判断。直到pa或pb为空,结束指数和的大小判断。若pi不为0,说明次数为k的项系数不为0,则构造新节点,存入次数、系数,并插入新链表中。然后,k减小1,进入下一次循环。执行for循环直到k=0。 得到结果后又将链表b倒置,恢复原来的降幂排序。 4多项式输出: 利用while循环遍历链表,输出每一项,直到尾部。【程序代码】 主函数 int main() { int n; cout请输入A(X)的项数(按降幂排列)\n; cinn; listnode *head_a=CreateList(n); coutA(X)=; printflist(head_a); cout请输入B(X)的项数(按降幂排列)\n; cinn; listnode *head_b=CreateList(n); // InverseList(head_b); coutB(X)=; printflist(head_b); listnode *head_c=MultiplyPoly(head_a,head_b); cout多项式相乘:endl; coutC(X)=A(X)*B(X)=; printflist(head_c); listnode *head_d=AddPoly(head_a,head_b); cout多项式相加:endl; coutD(X)=A(X)+B(X)=; printflist(head_d); } 多项式相加 listnode *AddPoly(listnode *head_a,listnode *head_b) { listnode *head_d,*pa,*pb,*pd,*newnode; pa=head_a; pb=head_b; if(pa-next==NULL pb-next==NUL

文档评论(0)

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

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

1亿VIP精品文档

相关文档