多项式加法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
班级:信息1301 姓名:胡苗苗
======== 实习报告一“PolyAdd ”演示程序==================
(一)、程序的功能和特点
功能:将两个多项式相加,利用单链表存储多项式,并实现多项式的加法。
特点:利用单链表进行多项式相加时,不生成新的结点,直接在原来的结点上运算。
(二)、程序中的算法设计
1.【逻辑结构与存储结构设计】
逻辑结构:存储多项式的的单链表是线性结构。
存储(物理)结构:存储多项式的的单链表是链式存储结构。
例如:
2.【基本操作设计】
①public booleaninsertBack(double c,int e)
给存储多项式的单链表的尾部插入一个结点
②给存储多项式的单链表中插入一个结点 新结点
3.【算法设计】
流程图:
算法描述:构造两个链表类s1,s2,头指针分别为ah,bh,从第一个结点开始比较:
(1)如果两个结点的多项式阶数相等,那么把两个系数相加,指数不变赋给s1的第一个结点,指针后移;
(2)如果s1的结点阶数小于s2的结点阶数,s1的指针ah后移,判断下一个结点阶数与s2当前阶数大小;
(3)如果s1的结点阶数大于s2,那么将s2的当前结点插入s1当前结点的前面。直到s1或s2的指针指向空。
判断s1或者s2指针是否指到末尾:
①若s2指针指空,那么结束程序。
②若s1指针指空,则把s1
的末尾指针指向s2剩余的部分。
4.【高级语言代码】
多项式加法:自身多项式和ob相加,和为自身
public void addPoly(linkListob) {
link ah=first; //自身的第一个结点
link bh=ob.first; //ob的第一个结点
link p,q; //辅助的指针,指向某个结点
//指针ah和bh都没有移到结束处
while(ah!=null&&bh!=null) {
if(ah.exp==bh.exp) { //阶数相同
ah.coef+=bh.coef; //改变自身结点系数
ah=ah.next; //自身单链表的当前指针后移
bh=bh.next; //多项式ob的当前指针后移}
else if(ah.exp ah=ah.next; //自身结点不变,指针后移 else { p=bh; //让p指向ob的当前结点 bh=bh.next; //多项式ob的当前指针后移 q=first; //把q指针移到ah的前驱结点 while(q.next!=ah) q=q.next; q.next=p; //把p结点插在了ah的位置 p.next=ah; //把ah接到了p结点后 } } //循环while结束 if(bh!=null) //如果多项式ob的当前指针没有到达尾部ah.next=bh; //把多项式ob的剩余部分挂在自身的最后} (三)、程序的输入输出和运行结果截屏 输入: 输出: