用C语言编写一个程序,设计一种单链表存储结构,每个结点存储一项的系数和指数,类型都是整型,编写完成产生多项式的函数、多项式相加及输出多项式的函数。
时间: 2024-09-27 09:03:30 浏览: 73
在C语言中,我们可以使用结构体定义一个表示多项式项的链表节点,并提供相应的操作函数。首先,我们需要创建一个结构体`PolynomialTerm`来存储系数(coefficient)和指数(exponent),然后定义链表头结点`PolynomialNode`。接下来,我们将编写函数来创建新节点、添加项、相加两个多项式以及打印多项式。
```c
#include <stdio.h>
#include <stdlib.h>
// 定义多项式项结构体
typedef struct PolynomialTerm {
int coefficient;
int exponent;
} PolynomialTerm;
// 链表节点结构体
typedef struct PolynomialNode {
PolynomialTerm term;
struct PolynomialNode* next;
} PolynomialNode;
// 创建新节点
PolynomialNode* create_node(int coefficient, int exponent) {
PolynomialNode* new_node = (PolynomialNode*)malloc(sizeof(PolynomialNode));
if (new_node != NULL) {
new_node->term.coefficient = coefficient;
new_node->term.exponent = exponent;
new_node->next = NULL;
}
return new_node;
}
// 添加项到多项式
void add_term_to_polynomial(PolynomialNode** head, int coefficient, int exponent) {
PolynomialNode* new_node = create_node(coefficient, exponent);
if (*head == NULL) {
*head = new_node;
} else {
PolynomialNode* current = *head;
while (current->next != NULL && current->term.exponent > exponent) {
current = current->next;
}
new_node->next = current->next;
current->next = new_node;
}
}
// 相加两个多项式
void add_poly(PolynomialNode** poly1, PolynomialNode** poly2, PolynomialNode** result) {
PolynomialNode* temp = *result = create_node(0, 0); // 初始化结果为0
while (*poly1 != NULL || *poly2 != NULL) {
if (*poly1 != NULL && (*poly1)->term.exponent >= (*poly2)->term.exponent) {
temp->next = *poly1;
*poly1 = (*poly1)->next;
} else if (*poly2 != NULL && (*poly2)->term.exponent >= (*poly1)->term.exponent) {
temp->next = *poly2;
*poly2 = (*poly2)->next;
} else {
PolynomialNode* merged = create_node(temp->next->term.coefficient + (*poly1)->term.coefficient, temp->next->term.exponent);
temp->next->next = merged;
temp->next = merged;
*poly1 = (*poly1)->next;
*poly2 = (*poly2)->next;
}
}
}
// 打印多项式
void print_polynomial(PolynomialNode* head) {
PolynomialNode* current = head;
printf("Polynomial: ");
while (current != NULL) {
printf("(%d*x^%d) ", current->term.coefficient, current->term.exponent);
current = current->next;
}
printf("\n");
}
int main() {
PolynomialNode* poly1_head = NULL, *poly2_head = NULL;
PolynomialNode* result_head = NULL;
// 示例:添加项
add_term_to_polynomial(&poly1_head, 2, 1);
add_term_to_polynomial(&poly1_head, -3, 3);
// 另一个示例:添加项
add_term_to_polynomial(&poly2_head, 4, 0);
add_term_to_polynomial(&poly2_head, 1, 2);
// 相加多项式
add_poly(&poly1_head, &poly2_head, &result_head);
// 输出结果多项式
print_polynomial(result_head);
return 0;
}
```
在这个程序中,我们首先分别创建了两个多项式`poly1`和`poly2`,然后通过`add_poly`函数将它们相加并保存在`result_head`。最后,我们使用`print_polynomial`函数来展示结果多项式。运行这个程序会得到两个多项式相加的结果。
阅读全文