//一元多项式的创建和相加
#include <bits/stdc++.h>
using namespace std;
#define ok 1
#define error 0
typedef struct dnode {
int xishu;//系数
int zhishu;//指数
struct dnode *next;
} dnode, *dlist;
//多项式的创建
void chuangjian(dlist &p, int m)
{
dnode *q, *pre, *s;
int i;
p = new dnode;
p->next = NULL;//先建立新的结点
for (int i = 1; i <= m; i++)//输入n个非0项
{
s = new dnode;//生成新的节点
cin >> s->xishu >> s->zhishu;//输入元素值
pre = p;//pre用于保存q的前驱,初值为头节点
q = p->next;
while (q && q->zhishu < s->zhishu)//找到第一个大于输入项指数的项q
{
pre = q;
q = q->next;
}
s->next = q;//将输入项s插入到q和前驱节点pre之间
pre->next = s;
}
}
void add(dlist &pa, dlist &pb)
{
dnode *r, *p1, *p2, *p3;
float sum;
p1 = pa->next;
p2 = pb->next;
p3 = pa;
while (p1 && p2)
{
if (p1->zhishu == p2->zhishu)
{
sum = p1->xishu + p2->xishu;
if (sum != 0)
{
p1->xishu = sum;
p3->next = p1;
p3 = p1;
p1 = p1->next;
r = p2;
p2 = p2->next;
delete r;
}
else
{
r = p1;
p1 = p1->next;
delete r;
r = p2;
p2 = p2->next;
delete r;
}
} else if (p1->zhishu < p2->zhishu)
{
p3->next = p1;
p3 = p1;
p1 = p1->next;
}
else
{
p3->next = p2;
p3 = p2;
p2 = p2->next;
}
}
p3->next = p1 ? p1 : p2;
delete pb;
}
int main ()
{
dlist pa, pb;
dnode *p;
int temp;
int i;
cout << "请输入多项式pa的系数:";
cin >> temp;
cout << "请输入多项式pa的系数和指数" << endl;
chuangjian(pa, temp);
cout << "请输入多项式pb的项数:";
cin >> temp;
cout << "请输入多项式pb的系数和指数" << endl;
chuangjian(pb, temp);
add(pa, pb);
cout << "多项式pa加pb是:" << endl;
p = pa->next;
i = 0;
while (p)
{
if (i)
cout << "+";
cout << "(" << p->xishu << ")*x^" << p->zhishu;
p = p->next;
i = 1;
}
cout << endl;
return 0;
}
数据结构-一元多项式的创建和相加
猜你喜欢
转载自blog.csdn.net/weixin_52045928/article/details/121687756
今日推荐
周排行