1. 多项式的创建
多项式链表是一个有序表,每项的位置要经过比较才能确定
2.多项式相加
设p1和p2分别指向Pa和Pb的当前结点,逐一比较两个结点的指数项,对于指数项相同的项,对应系数相加,若和不为0,则将他插入“和多项式”的链表中去;对于指数不相同的项,则通过比较将指数值较小的项插入到“和多项式”链表中去。Pa为“和多项式”,最后把Pb delete掉。
代码如下:
/*用链表实现多项式的相加*/
#include<iostream>
using namespace std;
//单项式、多项式的定义
struct PNode
{
float coef;//系数
int expn;//指数
PNode *next;
};
typedef PNode* Polynomial;
//多项式的创建
void CreatePolyn(Polynomial &P, int n)
{
P = new PNode;
P->next = NULL;
PNode *pre = P;
PNode *q = P->next;
for (int i = 0; i < n; i++)
{
PNode *s = new PNode;
cout << "请输入第" << i + 1 << "个单项式的系数:";
cin >> s->coef;
cout << "请输入第" << i + 1 << "个单项式的指数:";
cin >> s->expn;
pre = P;
q = P->next;
while (q&&q->expn<s->expn)
{
pre = q;
q = q->next;
}
s->next = q;
pre->next = s;
}
}
void AddPolyn(Polynomial &Pa,Polynomial &Pb)
{
PNode *p1 = Pa->next;
PNode *p2 = Pb->next;
PNode *p3 = Pa;
while (p1&&p2)
{
if (p1->expn == p2->expn)
{
float sum = p1->coef + p2->coef;
if (sum != 0)
{
p1->coef = sum;
p3->next = p1;
p3 = p1;
p1 = p1->next;
PNode *r = p2;
p2 = p2->next;
delete r;
}
else
{
PNode *r = p1; p1 = p1->next; delete r;
r = p2; p2 = p2->next; delete r;
}
}
else if (p1->expn < p2->expn)
{
p3->next = p1;
p3 = p1;
p1 = p1->next;
}
else
{
p3->next = p2;
p3 = p2;
p2 = p2->next;
}
}
p3->next = p1 ? p1 : p2;
delete Pb;
}
void Print(Polynomial P)
{
if (P->next)
{
if (P->next->coef > 0)
cout << P->next->coef << "x^" << P->next->expn;
if (P->next->coef < 0)
cout << P->next->coef << "x^" << P->next->expn;
}
PNode *p = P->next->next;
while (p)
{
if (p->coef > 0)
cout << "+" << p->coef<<"x^"<<p->expn;
if (p->coef < 0)
cout << p->coef << "x^" << p->expn;
p = p->next;
}
cout << endl;
}
int main()
{
Polynomial Pa,Pb;
cout << "创建Pa:" << endl;
CreatePolyn(Pa,2);
cout << "Pa=";
Print(Pa);
cout << "创建Pb:" << endl;
CreatePolyn(Pb, 2);
cout << "Pb=";
Print(Pb);
AddPolyn(Pa, Pb);
cout << "Pa+Pb=";
Print(Pa);
system("pause");
return 0;
}