c语言用单链表实现了稀疏多项式求和的程序编码
时间: 2024-03-09 17:48:20 浏览: 127
C语言单链表实现多项式相加
好的,以下是用单链表实现稀疏多项式求和的C语言代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点
typedef struct Node {
int coef; // 系数
int exp; // 指数
struct Node* next; // 指向下一个节点的指针
} node;
// 创建节点
node* create_node(int coef, int exp) {
node* new_node = (node*)malloc(sizeof(node));
new_node->coef = coef;
new_node->exp = exp;
new_node->next = NULL;
return new_node;
}
// 插入节点
void insert_node(node** head, node* new_node) {
node* p = *head;
node* prev = NULL;
while (p != NULL && p->exp > new_node->exp) {
prev = p;
p = p->next;
}
if (p != NULL && p->exp == new_node->exp) {
p->coef += new_node->coef;
free(new_node);
} else {
if (prev == NULL) {
*head = new_node;
} else {
prev->next = new_node;
}
new_node->next = p;
}
}
// 读取多项式
node* read_poly() {
node* head = NULL;
int n, coef, exp;
printf("请输入多项式项数:");
scanf("%d", &n);
for (int i = 0; i < n; i++) {
printf("请输入第%d项的系数和指数:", i+1);
scanf("%d%d", &coef, &exp);
node* new_node = create_node(coef, exp);
insert_node(&head, new_node);
}
return head;
}
// 输出多项式
void print_poly(node* head) {
node* p = head;
while (p != NULL) {
printf("%dX^%d", p->coef, p->exp);
if (p->next != NULL) {
printf("+");
}
p = p->next;
}
printf("\n");
}
// 多项式求和
node* add_poly(node* poly1, node* poly2) {
node* head = NULL;
node* p1 = poly1;
node* p2 = poly2;
while (p1 != NULL && p2 != NULL) {
if (p1->exp > p2->exp) {
insert_node(&head, create_node(p1->coef, p1->exp));
p1 = p1->next;
} else if (p1->exp < p2->exp) {
insert_node(&head, create_node(p2->coef, p2->exp));
p2 = p2->next;
} else {
int sum = p1->coef + p2->coef;
if (sum != 0) {
insert_node(&head, create_node(sum, p1->exp));
}
p1 = p1->next;
p2 = p2->next;
}
}
while (p1 != NULL) {
insert_node(&head, create_node(p1->coef, p1->exp));
p1 = p1->next;
}
while (p2 != NULL) {
insert_node(&head, create_node(p2->coef, p2->exp));
p2 = p2->next;
}
return head;
}
int main() {
printf("请输入第一个多项式:\n");
node* poly1 = read_poly();
printf("请输入第二个多项式:\n");
node* poly2 = read_poly();
node* sum = add_poly(poly1, poly2);
printf("多项式1:");
print_poly(poly1);
printf("多项式2:");
print_poly(poly2);
printf("和多项式:");
print_poly(sum);
return 0;
}
```
这个程序中,我们首先定义了一个节点结构体`node`,其中包含了系数和指数,并且还有一个指向下一个节点的指针`next`。
然后定义了三个操作节点的函数:`create_node`用于创建新节点,`insert_node`用于插入节点并保持多项式从高到低的指数顺序,`read_poly`用于读取多项式并将其转换为链表。
最后定义了一个求和函数`add_poly`,它将两个多项式作为参数并返回它们的和。在求和过程中,我们遍历两个多项式的链表,按照指数从高到低的顺序将每一项插入到结果链表中。
最后在`main`函数中,我们调用`read_poly`函数读取两个多项式,调用`add_poly`函数求和,并输出结果。
阅读全文