北邮数据结构实验一题目3一元多项式.docxVIP

北邮数据结构实验一题目3一元多项式.docx

  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文档。上传文档
查看更多
北邮数据结构实验一题目3一元多项式

北京邮电大学信息与通信工程学院 第 PAGE 11页 北京邮电大学电信工程学院 第 PAGE 1页 数据结构实验报告 实验名称: 实验一题目3一元多项式 学生姓名: 班 级: 班内序号: 学 号: 日 期: 1.实验要求 实验目的: 熟悉C++语言的基本编程方法,掌握集成编译环境的测试方法 学习指针、模板类、异常处理的使用 掌握线性表的操作实现方法 培养使用线性表解决实际问题的能力 实验内容: 利用线性表实现一个一元多项式Polynomial f(x) = a0 + a1x + a2x2 + a3x3 + … + anxn 提示: Polynomial的结点结构如下: struct term { float coef; //系数 int expn; //指数 }; 可以使用链表实现,也可以使用顺序表实现。 要求: 能够实现一元多项式的输入和输出 能够进行一元多项式相加 能够进行一元多项式相减 能够计算一元多项式在x处的值 能够计算一元多项式的导数(选作) 能够进行一元多项式相乘(选作) 编写测试main()函数测试线性表的正确性 2. 程序分析 2.1 存储结构 单链表: 2.2 关键算法分析 头插法构造单链表: 在堆中建立新结点:Node * s = new Node ; ②将a[i]写入到新结点的数据域:s-data = data[i]; ③修改新结点的指针域: s-next = front-next; ④修改头结点的指针域,将新结点加入到链表中: front-next = s; 一元多项式相乘 申请三个动态数组coe1、coe2、coe3,其长度为两个多项式最高幂相乘后的幂数; 为coe1与coe2赋初为0; 分别用coe1与coe2分别储存两个多项式的系数,比如说的一个多项式指数为i的系数存在coe1[i]里面,其他没有存过系数的元素均为0(相当于将二项式延长,没有的项则系数为0); 利用柯西乘积完成多项式相乘,用coe3储存乘积结果,即系数,并且系数不为0的项通过申请动态结构数组来储存,最后构造链表,具体代码: for (int i=0;i=m+P.m;i++) { coe3[i]=0; for (int j=0;j=i;j++) { coe3[i]+=coe1[j]*coe2[i-j]; } if (coe3[i]!=0) { n++; } } element *e3=new element[n]; for (int i=0,j=0;i=m+P.m;i++) { if (coe3[i]!=0) { e3[j].coef=coe3[i]; e3[j].exp=i; j++; } } C=new Polylist(e3,n); 一元多项式求和: 第一种情况:若p-data.expnq-data.expn,即A链表当前结点p的指数小于B链表的当前结点q的指数,则p结点保留不变,然后p指向A链表的下一个结点继续进行比较。 p_prior=p; p=p-next; 第二种情况:若p-data.expn<q-data.expn,即A链表当前结点p的指数大于B链表的当前结点q的指数,则应将q结点加入到A链表p结点之前,然后q指向B链表的下一个结点,继续进行比较。 p_prior-next=q; p_prior=q; q=q-next; p_prior-next=p; 第三种情况:若p-data.expn==q-data.expn,即A链表当前结点p的指数等于B链表的当前结点q的指数,则两结点为同类项,应将两结点的系数求和,此时又分为两种情况: (a)若合并的系数为0,计量同类项抵消,则删除p结点; (b)若合并的系数不为0,将其重新赋予p结点。 两结点合并后可删除q结点,并且令p和q分别指向各自的下一个结点继续进行比较。 (a)若合并的系数为0: ①p_prior-next=p-next; ②delete p; p=p_prior-next; Node*temp=q; q=q-next; delete temp; (b)若合并的系数不为0: ①p_prior=p; p=p-next; ③Node*temp=q; ④q=q-next; delete temp; 第四种情况:若p为空且q不为空,则应将q结点及其后续所有结点追加到A链表的最后:p_prior-next=q; 注:减法和加法用的是同一个函数,若是减法则将减数的多项

文档评论(0)

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

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

1亿VIP精品文档

相关文档