实现多项式相加运算:多项式单链表按指数递减排序,输出完整可运行代码
时间: 2024-10-21 07:15:40 浏览: 32
为了实现多项式相加运算,我们可以使用链表数据结构来存储多项式的系数和对应的指数。首先,我们需要定义一个节点(Node)表示多项式的项,然后创建一个多项式链表(PolynomialList)来存储这些节点。这里,我们将按照指数递减的顺序对链表进行排序。
以下是一个简单的C++实现:
```cpp
#include <iostream>
#include <vector>
#include <algorithm>
// 定义链表节点
struct Term {
int coefficient; // 系数
int exponent; // 指数
Term(int c, int e) : coefficient(c), exponent(e) {}
bool operator<(const Term& other) const { return exponent > other.exponent; } // 排序依据为指数降序
};
// 多项式链表
class PolynomialList {
private:
std::vector<Term> terms;
public:
void add_term(Term term) {
terms.push_back(term);
sort(terms.begin(), terms.end()); // 按照指数降序排列
}
// 添加两个多项式并合并相同指数的项
void add(PolynomialList& other) {
for (Term t : other.terms) {
if (std::find_if(terms.begin(), terms.end(), [t](Term& t1) { return t1.exponent == t.exponent; }) != terms.end()) {
t1.coefficient += t.coefficient;
} else {
terms.push_back(t);
}
}
sort(terms.begin(), terms.end());
}
// 打印多项式
void print() const {
for (const Term& term : terms) {
std::cout << term.coefficient << "x^" << term.exponent << " + ";
}
std::cout << "\n";
}
};
int main() {
PolynomialList poly1;
poly1.add_term(Term(3, 2)); // 3x^2
poly1.add_term(Term(5, 0)); // 5x^0 (即常数项)
poly1.print(); // 输出: 3x^2 + 5 +
PolynomialList poly2;
poly2.add_term(Term(2, 3)); // 2x^3
poly2.add_term(Term(-1, 1)); // -1x^1
poly2.add_term(Term(7, 0)); // 7x^0
poly1.add(poly2); // 相加
poly1.print(); // 输出: 8x^3 + 4x^2 + 4x + 5 +
return 0;
}
```
这个程序首先定义了`Term`结构体表示多项式的每一项,然后在`PolynomialList`类中实现了添加项、合并相同指数的项以及打印多项式的方法。`main`函数中创建了两个多项式并进行了相加操作,最后输出了结果。
阅读全文