用c语言建立单链表来表示多项式,并进行二个多项式的相乘并输出结果
时间: 2024-12-08 17:22:05 浏览: 9
在C语言中,我们可以使用结构体(struct)来表示多项式,每个节点包含一个系数(coefficient)和一个指向下一个节点的指针(next)。下面是一个简单的示例,展示如何创建单链表表示多项式,以及两个多项式相乘的基本步骤:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义多项式节点结构体
typedef struct {
int coefficient; // 系数
struct PolynomialNode *next; // 指向下一个节点的指针
} PolynomialNode;
// 创建一个新的多项式节点
PolynomialNode* createTerm(int coefficient) {
PolynomialNode* newNode = (PolynomialNode*)malloc(sizeof(PolynomialNode));
newNode->coefficient = coefficient;
newNode->next = NULL;
return newNode;
}
// 插入节点到链表
void insertTerm(PolynomialNode** head, int coefficient) {
PolynomialNode* newTerm = createTerm(coefficient);
if (*head == NULL) {
*head = newTerm;
} else {
PolynomialNode* current = *head;
while (current->next != NULL) {
current = current->next;
}
current->next = newTerm;
}
}
// 打印链表表示的多项式
void printPolynomial(PolynomialNode* head) {
PolynomialNode* temp = head;
printf("(");
while (temp != NULL) {
printf("%d", temp->coefficient);
if (temp->next != NULL) {
printf(" + ");
}
temp = temp->next;
}
printf(")");
}
// 相乘的主函数
void multiplyPolynomials(PolynomialNode** p1, PolynomialNode** p2, PolynomialNode** result) {
PolynomialNode* current1 = *p1;
PolynomialNode* current2 = *p2;
PolynomialNode* dummy = createTerm(0); // 初始化一个哑节点,用于合并结果
PolynomialNode* temp = dummy;
while (current1 != NULL || current2 != NULL) {
if (current1 != NULL) {
PolynomialNode* term1 = createTerm(current1->coefficient * current2->coefficient);
term1->next = temp->next;
temp->next = term1;
current1 = current1->next;
}
if (current2 != NULL) {
current2 = current2->next;
}
if (current1 == NULL && current2 == NULL) {
*result = dummy->next;
break;
}
if (current2 != NULL) {
current1 = current1 ? current1 : dummy;
}
}
}
int main() {
PolynomialNode* p1_head = NULL, *p2_head = NULL, *result_head = NULL;
// 示例:输入两个多项式
insertTerm(&p1_head, 2); insertTerm(&p1_head, -1); insertTerm(&p1_head, 3); // (2 - 1 + 3)
insertTerm(&p2_head, 4); insertTerm(&p2_head, 5); // (4 + 5)
multiplyPolynomials(&p1_head, &p2_head, &result_head);
// 输出结果
printPolynomial(result_head);
return 0;
}
```
在这个例子中,我们首先创建了两个多项式`p1`和`p2`的链表表示,然后通过`multiplyPolynomials`函数计算它们的乘积,并将结果存储在一个新的链表`result`中。最后,`printPolynomial`函数用于打印出结果多项式。
阅读全文