建立一元多项式单链表时根据输入值来确定结束构建单链表,编写一元多项式的相加程序,编写多项式单链表的输出函数,以便验证程序的执行结果的c语言代码和注释是什么
时间: 2023-05-12 11:04:30 浏览: 120
数据结构(C语言)用单链表存储一元多项式并实现两个多项式的相加运算.doc
5星 · 资源好评率100%
以下是建立一元多项式单链表、相加程序和输出函数的 C 语言代码和注释:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义一元多项式的结构体
typedef struct PolyNode {
int coef; // 系数
int expon; // 指数
struct PolyNode *next; // 指向下一个节点的指针
} PolyNode, *Polynomial;
// 创建一元多项式单链表
Polynomial createPoly() {
Polynomial head, tail, p;
int coef, expon;
// 创建头结点
head = (Polynomial)malloc(sizeof(PolyNode));
head->next = NULL;
tail = head;
// 输入系数和指数,构建单链表
printf("请输入系数和指数,以空格分隔,输入 0 0 结束:\n");
scanf("%d %d", &coef, &expon);
while (coef != 0 || expon != 0) {
p = (Polynomial)malloc(sizeof(PolyNode));
p->coef = coef;
p->expon = expon;
tail->next = p;
tail = p;
scanf("%d %d", &coef, &expon);
}
tail->next = NULL;
return head;
}
// 一元多项式相加
Polynomial addPoly(Polynomial p1, Polynomial p2) {
Polynomial head, tail, p;
int sum;
// 创建头结点
head = (Polynomial)malloc(sizeof(PolyNode));
head->next = NULL;
tail = head;
p1 = p1->next;
p2 = p2->next;
// 遍历两个多项式单链表,将相同指数的项相加
while (p1 && p2) {
if (p1->expon < p2->expon) {
tail->next = p1;
tail = p1;
p1 = p1->next;
} else if (p1->expon > p2->expon) {
tail->next = p2;
tail = p2;
p2 = p2->next;
} else {
sum = p1->coef + p2->coef;
if (sum != 0) {
p = (Polynomial)malloc(sizeof(PolyNode));
p->coef = sum;
p->expon = p1->expon;
tail->next = p;
tail = p;
}
p1 = p1->next;
p2 = p2->next;
}
}
// 将剩余的项添加到结果多项式单链表中
while (p1) {
tail->next = p1;
tail = p1;
p1 = p1->next;
}
while (p2) {
tail->next = p2;
tail = p2;
p2 = p2->next;
}
tail->next = NULL;
return head;
}
// 输出一元多项式单链表
void printPoly(Polynomial p) {
if (!p->next) {
printf("0 0\n");
return;
}
while (p->next) {
p = p->next;
printf("%d %d", p->coef, p->expon);
if (p->next) {
printf(" ");
} else {
printf("\n");
}
}
}
int main() {
Polynomial p1, p2, p3;
printf("请输入第一个多项式:\n");
p1 = createPoly();
printf("请输入第二个多项式:\n");
p2 = createPoly();
p3 = addPoly(p1, p2);
printf("相加后的多项式为:\n");
printPoly(p3);
return 0;
}
```
注:以上代码参考自《数据结构与算法分析》第二版。
阅读全文