用c++语言编程,采用二路归并算法完成两个一元多项式相关运算: 1 创建有序表(可以采用顺序存储或链式存储) 2 输出有序表,显示多项式样式 3 实现两个一元多项式的加法操作,并输出最终结果
时间: 2024-10-13 21:13:47 浏览: 42
在C++中,我们可以使用结构体(struct)来表示一元多项式,包括系数数组和次数信息。对于有序表,这里我们选择链式存储(因为链表方便插入和删除元素),可以使用双向链表(double linked list)来存储多项式。
首先,定义一个多项式节点(PolynomialNode):
```cpp
struct PolynomialNode {
double coefficient;
int exponent;
PolynomialNode* next;
};
```
然后创建有序链表的头结点:
```cpp
PolynomialNode* createEmptyList() {
return new PolynomialNode{0, 0, nullptr};
}
```
接下来是函数来添加多项式到链表:
```cpp
void insertPolynomial(PolynomialNode** head, const std::vector<double>& coefficients, int maxExponent) {
PolynomialNode* newNode = createEmptyList();
for (int i = 0; i <= maxExponent; ++i) {
if (coefficients[i] != 0) {
newNode->coefficient = coefficients[i];
newNode->exponent = i;
newNode->next = *head;
*head = newNode;
}
}
}
```
输出有序表的功能,可以遍历链表并打印:
```cpp
void printPolynomial(const PolynomialNode* node) {
while (node != nullptr) {
std::cout << node->coefficient << "x^" << node->exponent << " ";
node = node->next;
}
std::cout << "\n";
}
```
实现两个一元多项式的加法操作:
```cpp
PolynomialNode* addPolynomials(const PolynomialNode* p1, const PolynomialNode* p2) {
PolynomialNode* resultHead = createEmptyList();
PolynomialNode* currentResult = resultHead;
while (p1 != nullptr || p2 != nullptr) {
double coefficient1 = p1 ? p1->coefficient : 0;
double coefficient2 = p2 ? p2->coefficient : 0;
double sumCoefficient = coefficient1 + coefficient2;
if (p1 && p2 && p1->exponent == p2->exponent) {
// 如果指数相等,合并系数
p1->coefficient += coefficient2;
if (sumCoefficient > 0)
p1 = p1->next;
else
p2 = p2->next;
} else if (p1 && p1->exponent < p2->exponent) {
// 将第一个多项式的剩余部分加入结果
currentResult->coefficient = sumCoefficient;
currentResult->next = p1;
p1 = p1->next;
currentResult = currentResult->next;
} else {
// 同理处理第二个多项式
currentResult->coefficient = sumCoefficient;
currentResult->next = p2;
p2 = p2->next;
currentResult = currentResult->next;
}
}
return resultHead;
}
```
最后,调用`printPolynomial`来展示加法结果:
```cpp
void displaySum(const PolynomialNode* sum) {
printPolynomial(sum);
}
```
阅读全文