用C语言编写一个程序 exp2-10.cpp,用单链表存储一元多项式,并实现两个一元多项式相乘的运算
时间: 2024-11-13 10:21:02 浏览: 11
数据结构(C语言)用单链表存储一元多项式并实现两个多项式的相加运算.doc
5星 · 资源好评率100%
在C语言中,我们可以使用结构体表示单链表节点,并包含多项式的系数和指数。首先,我们需要定义一个链表节点的数据结构:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构
struct PolynomialNode {
double coefficient; // 系数
int exponent; // 指数
struct PolynomialNode* next; // 指向下一个节点的指针
};
// 创建新的节点
struct PolynomialNode* createNode(double coeff, int exp) {
PolynomialNode* newNode = (PolynomialNode*)malloc(sizeof(PolynomialNode));
newNode->coefficient = coeff;
newNode->exponent = exp;
newNode->next = NULL;
return newNode;
}
// 单链表表示的一元多项式
typedef struct {
struct PolynomialNode* head;
} Polynomial;
// 相当于相乘操作的部分函数,用于处理两节点的乘积
struct PolynomialNode* multiplyNodes(struct PolynomialNode* node1, struct PolynomialNode* node2) {
if (!node1 || !node2)
return NULL;
double product = node1->coefficient * node2->coefficient;
int newExponent = node1->exponent + node2->exponent;
PolynomialNode* newNode = createNode(product, newExponent);
newNode->next = multiplyNodes(node1->next, node2); // 递归处理剩余部分
return newNode;
}
// 相乘两个多项式并返回结果
void multiplyPolynomials(Polynomial* poly1, Polynomial* poly2) {
PolynomialNode* resultHead = multiplyNodes(poly1->head, poly2->head);
poly1->head = resultHead;
}
int main() {
// 示例创建两个一元多项式链表
Polynomial poly1 = {createNode(2.0, 0)};
poly1.head->next = createNode(3.0, 1); // x
Polynomial poly2 = {createNode(4.0, 0)};
poly2.head->next = createNode(5.0, 1); // x^2
multiplyPolynomials(&poly1, &poly2);
PolynomialNode* current = poly1.head;
while (current) {
printf("%.1f*x^%d ", current->coefficient, current->exponent);
current = current->next;
}
return 0;
}
```
这个程序实现了两个一元多项式相乘的功能,通过`multiplyPolynomials`函数将两个多项式`poly1`和`poly2`的结果链接到第一个多项式的链表头部。注意这只是一个简单的示例,实际应用中可能需要考虑更复杂的边界情况和优化。
阅读全文