问题描述
设Pn(x)和Qm(x)分别两个一元多项式。试编写程序实现一元多项式的加法运算。
基本要求
需要基于线性表的基本操作来实现一元多项式的加法运算
需要利用有序链表来实现线性表。 (注意此处!顺序链表的意思就是你的节点数据必须是有序的!)
一、问题分析:
一元多项式就是说类似于这样的式子:2x^3+3x^6......未知数只有一个的式子。我的思路是基于链表来实现,两个多项式分别用链表去存储,计算得到的结果再用一个链表去存储,总共要使用三个链表。
二、具体实现:
怎么生成链表我就不说了,详见上一篇博客。接下来重点讲的是两个链表相加的情况,要是考虑不齐全就会出错。首先两个多项式的长度不一定相等,因此要分成一下三种情况:(1)两个多项式,只有多项式A;(2)两个多项式,只有多项式B(3)两个多项式存储在。因为要求实现是有序链表,因此两个多项式相加的时候,最好从最大的幂或者最大的系数开始加,具体何种顺序自己定,我这里是按照幂的大到小。
不多说,贴代码:
Link* Link::Add(Link* A,Link* B)
{
Link* C = new Link;
C->next = NULL;//创建一个C链表
Link* p1 = A->next;
Link* p2 = B->next;
Link* p3;
Link* rearC=C;//初始化C链表(头尾一样,链表为空)
while(p1!=NULL&&p2!=NULL)//情况3
{
if(p1->exp>p2->exp)
{
p3 = new Link;//申请一个新节点
p3->exp = p1->exp;
p3->cofe = p1->cofe;
p3->next=NULL;//方便下一个节点链接
rearC->next=p3;//插入到C链表的尾部
rearC=p3;
p1=p1->next ;//寻找下一个
}
else if(p1->exp<p2->exp)
{
p3 = new Link;//申请一个新节点
p3->exp = p2->exp;
p3->cofe = p2->cofe;
p3->next=NULL;//方便下一个节点链接
rearC->next=p3;//插入到C链表的尾部
rearC=p3;
p2=p2->next ;//寻找下一个
}
else
{
if(p1->cofe+p2->cofe!=0