要求c语言编写一个程序,用单链表存储一元多项式,并实现两个多项式相乘运算。
时间: 2024-10-16 21:13:14 浏览: 106
在C语言中,我们可以使用结构体来表示多项式的每个项,包括系数和指数。这里首先创建一个表示单链表节点的结构体,然后定义一个多项式结构体,包含头结点和操作函数。为了实现两个多项式相乘,我们将采用分治策略,即逐步计算每一项的乘积。
以下是一个简单的示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构
typedef struct Node {
int coefficient;
int exponent;
struct Node* next;
} PolynomialNode;
// 定义多项式结构体
typedef struct {
PolynomialNode* head;
int degree; // 最高次幂
} Polynomial;
// 创建一个新的多项式项并添加到链表尾部
void addTerm(Polynomial* poly, int coefficient, int exponent) {
PolynomialNode* newNode = (PolynomialNode*)malloc(sizeof(PolynomialNode));
newNode->coefficient = coefficient;
newNode->exponent = exponent;
newNode->next = NULL;
if (poly->head == NULL) {
poly->head = newNode;
poly->degree = exponent;
} else if (exponent > poly->degree) {
poly->degree = exponent;
}
PolynomialNode* temp = poly->head;
while (temp->next != NULL && temp->exponent < exponent) {
temp = temp->next;
}
temp->next = newNode;
}
// 计算两个多项式的乘积
Polynomial multiplyPolynomials(Polynomial poly1, Polynomial poly2) {
Polynomial result;
result.head = NULL;
result.degree = -1;
for (PolynomialNode* node1 = poly1.head; node1 != NULL; node1 = node1->next) {
for (PolynomialNode* node2 = poly2.head; node2 != NULL; node2 = node2->next) {
int productCoefficient = node1->coefficient * node2->coefficient;
int combinedExponent = node1->exponent + node2->exponent;
if (combinedExponent > result.degree) {
result.degree = combinedExponent;
}
PolynomialNode* newNode = (PolynomialNode*)malloc(sizeof(PolynomialNode));
newNode->coefficient = productCoefficient;
newNode->exponent = combinedExponent;
newNode->next = result.head;
result.head = newNode;
}
}
return result;
}
int main() {
Polynomial p1, p2, product;
// 初始化多项式
addTerm(&p1, 2, 1); // 2x^1
addTerm(&p1, 3, 0); // 3x^0
addTerm(&p2, 4, 2); // 4x^2
addTerm(&p2, 5, 1); // 5x^1
// 相乘
product = multiplyPolynomials(p1, p2);
// 输出结果
PolynomialNode* temp = product.head;
printf("Product polynomial:\n");
while (temp != NULL) {
printf("%dx^%d ", temp->coefficient, temp->exponent);
temp = temp->next;
}
printf("\n");
return 0;
}
```
这个程序实现了两个多项式相乘的功能,用户可以根据需要创建更多的多项式并进行相乘操作。注意,此代码仅演示了基本功能,实际应用中可能需要考虑内存管理和错误处理等细节。
阅读全文
相关推荐


















