📅  最后修改于: 2023-12-03 15:36:42.204000             🧑  作者: Mango
在代数中,多项式是由常数、变量和指数的和组成的表达式。在此处,我们将使用链表来表示这些多项式,并编写程序来添加两个多项式。
我们可以使用类来表示一个多项式中的项。每个项都应包含系数和指数。一个多项式是由多个这些项组成的。
我们可以使用一个链表来存储多项式。链表中的每个节点都包含一个项和一个指向下一个节点的指针。
下面是一个项的定义:
class Term {
public:
int coef;
int exp;
Term* next;
};
这是一个链表节点的定义:
class Node {
public:
Term term;
Node* next;
};
我们需要使用一个指向头节点的指针来表示整个多项式。下面是一个多项式的定义:
class Polynomial {
public:
Node* head;
};
要将两个多项式相加,我们需要将它们的项相加,然后将结果添加到新的多项式中。如果两个项具有相同的指数,则它们的系数相加。否则,它们应该被视为不同的项。
下面是一个将两个多项式相加的代码:
Polynomial add(Polynomial p1, Polynomial p2) {
Polynomial res;
Node* p = p1.head;
Node* q = p2.head;
Node* r = res.head = new Node;
while (p && q) {
if (p->term.exp == q->term.exp) {
// 相同指数的项系数相加
int sum = p->term.coef + q->term.coef;
if (sum != 0) {
r = r->next = new Node;
r->term.coef = sum;
r->term.exp = p->term.exp;
}
p = p->next;
q = q->next;
} else if (p->term.exp > q->term.exp) {
// 将 p 中的项添加到 res 中
r = r->next = new Node;
*r = *p;
p = p->next;
} else {
// 将 q 中的项添加到 res 中
r = r->next = new Node;
*r = *q;
q = q->next;
}
}
// 将 p 或 q 中剩余的项添加到 res 中
r->next = p ? p : q;
return res;
}
下面是一个示例程序,演示了如何使用上述代码将两个多项式相加:
#include <iostream>
using namespace std;
Polynomial read_poly() {
Polynomial P;
Node* p = P.head = new Node;
int n;
cin >> n;
for (int i = 0; i < n; i++) {
p = p->next = new Node;
cin >> p->term.coef >> p->term.exp;
}
return P;
}
void print_poly(Polynomial P) {
for (Node* p = P.head->next; p; p = p->next) {
cout << p->term.coef << "x^" << p->term.exp;
if (p->next) {
cout << " + ";
}
}
cout << endl;
}
int main() {
Polynomial P1 = read_poly();
Polynomial P2 = read_poly();
Polynomial P3 = add(P1, P2);
print_poly(P3);
return 0;
}
在此示例中,read_poly
函数用于从标准输入读取一个多项式,并返回一个 Polynomial
对象。print_poly
函数用于将一个多项式打印到标准输出中。
使用这个程序,您可以从标准输入中读取两个多项式,并将它们相加。程序将打印结果多项式到标准输出中。
使用链表来表示多项式是一种有效的方法。链表可以快速添加和删除多项式中的项。通过使用适当的数据结构和算法,我们可以轻松地将两个多项式相加。这是一种很好的练习,可以帮助您熟悉链表和多项式的概念,并提高您的编程技能。