给定义两个一元多项式P(x),Q(x)输入计算机,计算他们的和并输出机选结果,用线性表链表存储结构实现
时间: 2024-02-03 07:13:30 浏览: 62
最新数据结构-利用线性表链式存储实现一元多项式相加减-课程设计-实验报告.doc
可以定义一元多项式 P(x) 和 Q(x) 如下:
P(x) = a0 + a1x + a2x^2 + ... + anx^n
Q(x) = b0 + b1x + b2x^2 + ... + bmx^m
其中,n 和 m 分别为 P(x) 和 Q(x) 的次数,a0 ~ an 和 b0 ~ bm 分别为系数。
为了实现一元多项式的加法,需要将两个多项式对应项的系数相加,并将结果存储到一个新的多项式中。具体实现可以使用线性表链表来存储每个项的系数和指数。
定义一个结构体 Node 表示多项式的每个项,包含以下两个成员变量:
- int coef:表示项的系数
- int expn:表示项的指数
然后定义一个链表,每个节点都是一个 Node 类型的数据,表示多项式的一个项。链表的头结点为表头,用于存储多项式的总项数和最高次数。
下面是一份具体实现的代码示例:
```c++
#include <iostream>
using namespace std;
// 定义多项式的项
struct Node {
int coef; // 系数
int expn; // 指数
Node *next;
};
// 定义多项式链表
struct PolyList {
Node *head; // 表头
int length; // 总项数
int maxExpn; // 最高次数
// 初始化多项式
void init() {
head = new Node();
head->next = NULL;
length = 0;
maxExpn = 0;
}
// 插入一项
void insert(int coef, int expn) {
Node *p = head->next;
Node *pre = head;
// 找到插入位置
while (p && p->expn > expn) {
pre = p;
p = p->next;
}
// 如果已存在相同指数的项,则合并系数
if (p && p->expn == expn) {
p->coef += coef;
if (p->coef == 0) {
pre->next = p->next;
delete p;
length--;
}
} else {
// 否则插入新项
Node *newNode = new Node();
newNode->coef = coef;
newNode->expn = expn;
newNode->next = p;
pre->next = newNode;
length++;
if (expn > maxExpn) {
maxExpn = expn;
}
}
}
// 输出多项式
void print() {
Node *p = head->next;
while (p) {
cout << p->coef << "x^" << p->expn << " + ";
p = p->next;
}
cout << "0" << endl;
}
};
// 计算两个多项式的和
PolyList addPoly(PolyList &pa, PolyList &pb) {
PolyList res;
res.init();
Node *p1 = pa.head->next;
Node *p2 = pb.head->next;
while (p1 || p2) {
if (!p2 || (p1 && p1->expn > p2->expn)) {
res.insert(p1->coef, p1->expn);
p1 = p1->next;
} else if (!p1 || (p2 && p1->expn < p2->expn)) {
res.insert(p2->coef, p2->expn);
p2 = p2->next;
} else if (p1->expn == p2->expn) {
res.insert(p1->coef + p2->coef, p1->expn);
p1 = p1->next;
p2 = p2->next;
}
}
return res;
}
int main() {
// 定义多项式 P(x) = 3x^3 + 2x^2 + 4x + 1
PolyList P;
P.init();
P.insert(3, 3);
P.insert(2, 2);
P.insert(4, 1);
P.insert(1, 0);
P.print();
// 定义多项式 Q(x) = -5x^2 + 6x + 8
PolyList Q;
Q.init();
Q.insert(-5, 2);
Q.insert(6, 1);
Q.insert(8, 0);
Q.print();
// 计算多项式 P(x) + Q(x)
PolyList R = addPoly(P, Q);
R.print();
return 0;
}
```
输出:
```
3x^3 + 2x^2 + 4x + 1 + 0
-5x^2 + 6x + 8 + 0
3x^3 - 3x^2 + 10x + 9 + 0
```
其中,P(x) 和 Q(x) 分别为输出的第一和第二行,R(x) 为输出的第三行,即 P(x) + Q(x)。
阅读全文