一元多项式的相加
对于相乘的运算,可以对于每一个L2中的结点,都遍历L1进行相乘,然后存放到一个多项式里面,最后将所有多项式进行相加
#include<bits/stdc++.h>
using namespace std;
typedef struct LNode {
float num1;
int num2;
struct LNode* next;
}LNode ,*LinkList;
void initLinkList(LinkList& L) {
L = new LNode;//分配空间返回给指针,分配的即为头结点
L->next = NULL;
}
void creat(LinkList& L) {
int n;
float c;
int e;
LNode* p, * r = L;
cout << "请输入多项式的项数:";
cin >> n;
for (int i = 0; i < n; i++) {
cin >> c >> e;
p = new LNode;
p->num1 = c;
p->num2 = e;
r->next = p;
r = p;
}
r->next = NULL;
}
void printf(LinkList L) {
LNode* p = L->next;//第一个结点
while (p->next) {
if (p->num2 == 0) {
cout << p->num1 << "+";
}
else {
cout << p->num1 << "X^" << p->num2 << "+";
}
p = p->next;
}
cout << p->num1 << "X^" << p->num2 << endl;
}
LNode* prior(LinkList L, LNode *p) {
//获取结点前驱,在插入的时候避免顺序混乱
LNode* s = L->next;
while (s->next != p)
s = s->next;
return s;
}
void add(LinkList& L1, LinkList& L2) {
LNode* p1 = L1->next;
LNode* p2 = L2->next;
LNode* s;
while (p1 && p2) {//均不空
if (p1->num2 == p2->num2) {//指数相等,系数相加
p1->num1 += p2->num1;
p1 = p1->next;
p2 = p2->next;
}
else if (p1->num2 > p2->num2) {
s = p2->next;//保留原来的路径
LNode *m=prior(L1, p1);//插在当前结点之前,避免乱序
p2->next = m->next;
m->next = p2;
p2 = s;
}
else if (p1->num2 < p2->num2) {
p1 = p1->next;
}
}
if (p2) {//p2较长
s = L1->next;
while (s->next)
s = s->next;
s->next = p2;
}
}
int main() {
LinkList L1;//这里声明的是一个指针
initLinkList(L1);
creat(L1);
printf(L1);
cout << endl;
/*
4
7 0
1 2
3 4
10 7
*/
LinkList L2;//这里声明的是一个指针
initLinkList(L2);
creat(L2);
printf(L2);
cout << endl;
/*
6
8 0
1 1
3 2
3 3
4 4
10 8
*/
add(L1, L2);
printf(L1);
return 0;
}