代码如下:
#include <iostream>
using namespace std;
typedef struct PNode {
float coef;//系数
int expn; //指数
struct PNode* next;
}PNode, * Polynomial;
void initPolyn(Polynomial& p) {
p = new PNode;
p->next = NULL;
}
void CreatePolyn(Polynomial& P, int n) {
Polynomial s, pre,q;
P = new PNode;
P->next = NULL;
for (int i = 1; i <= n;++i)
{
s = new PNode;
cin >> s->coef >> 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 cout_L(Polynomial l, int n)// 打印链表的数据,以作检验
{
Polynomial p;
p = l->next;
cout << "f(x) = " ;
cout << p->coef << "x^" << p->expn;
p = p->next;
for (int i = 1; i < n; i++)
{
cout << " + ";
cout << p->coef << "x^" << p->expn;
p = p->next;
}
cout << endl;
}
int number_L(Polynomial M) {
Polynomial P;
int i = 1;
P = M->next;
while (P != NULL) //改do while会更好
{
P = P->next;
i++;
}
return i;
}
void merge_L(Polynomial& la, Polynomial& lb, Polynomial& lc)
{
Polynomial pa, pb, pc;
pa = la->next;
pb = lb->next;
pc = lc = la;
while (pa && pb)
{
if (pa->expn == pb->expn)
{
pa->coef = pa->coef + pb->coef;
pc->next = pa;
pc = pa;
pa = pa->next;
pb = pb->next;
}
else if (pa->expn > pb->expn)
{
pc->next = pb;
pc = pb;
pb = pb->next;
}
else if (pa->expn < pb->expn)
{
pc->next = pa;
pc = pa;
pa = pa->next;
}
}
pc->next = pa ? pa : pb;
}
int main(void)
{
Polynomial La, Lb, Lc;
int a, b, H;
cout << "输入第一个多项式的个数" << endl;
cin >> a;
cout << "输入第一个多项式的系数和个数" << endl;
CreatePolyn(La, a);
cout_L(La, a);
cout << "输入第二个多项式的个数" << endl;
cin >> b;
cout << "输入第二个多项式的系数和个数" << endl;
CreatePolyn(Lb, b);
cout_L(Lb, b);
initPolyn(Lc);
merge_L(La, Lb, Lc);
H = number_L(Lc);
cout << "新合并的多项式为:";
cout_L(Lc,H-1);
return 0;
}
调试结果为:
本人是大二计科专业的初学者,如有错误敬请指出。