用数据结构写出实现两多项式相加的完整算法假定储存两多项式的带头节点的单链表HaHb已经建立好
- 定义一个新的链表Hc,用于存储相加后的结果。
- 定义两个指针pa和pb,分别指向链表Ha和Hb的第一个节点。
- 定义一个指针pc,初始指向链表Hc的头节点。
- 进行循环遍历,直到pa和pb都指向了各自链表的结束节点。
- 在每次循环中,比较pa和pb所指向节点的指数大小,将较小的节点插入到链表Hc中,并将指针pa或pb后移一位。
- 如果pa和pb所指向的节点指数相同,则将它们的系数相加,并将结果插入到链表Hc中,并将指针pa和pb都后移一位。
- 如果遍历结束后,其中一个链表还有剩余节点,则将剩余节点插入到链表Hc中。
- 返回链表Hc。
完整代码如下:
// 定义多项式节点结构体
struct PolyNode {
int coef; // 系数
int expon; // 指数
struct PolyNode *next; // 指向下一个节点的指针
};
typedef struct PolyNode *Polynomial; // 多项式类型定义
Polynomial AddPolynomial(Polynomial Ha, Polynomial Hb) {
Polynomial Hc, pa, pb, pc;
Hc = (Polynomial)malloc(sizeof(struct PolyNode)); // 创建头节点
Hc->next = NULL; // 初始化为空链表
pa = Ha->next;
pb = Hb->next;
pc = Hc;
while (pa && pb) { // 循环遍历两个链表,直到有一个链表为空
if (pa->expon < pb->expon) { // 将较小的节点插入到链表Hc中
pc->next = pa;
pc = pa;
pa = pa->next;
} else if (pa->expon > pb->expon) { // 将较小的节点插入到链表Hc中
pc->next = pb;
pc = pb;
pb = pb->next;
} else { // 如果指数相同,则将系数相加,并将结果插入到链表Hc中
int sum = pa->coef + pb->coef;
if (sum != 0) { // 如果系数之和不为0,则插入节点
Polynomial node = (Polynomial)malloc(sizeof(struct PolyNode));
node->coef = sum;
node->expon = pa->expon;
pc->next = node;
pc = node;
}
pa = pa->next;
pb = pb->next;
}
}
while (pa) { // 如果Ha还有剩余节点,则将剩余节点插入到链表Hc中
pc->next = pa;
pc = pa;
pa = pa->next;
}
while (pb) { // 如果Hb还有剩余节点,则将剩余节点插入到链表Hc中
pc->next = pb;
pc = pb;
pb = pb->next;
}
pc->next = NULL; // 最后将Hc的尾节点指向NULL
return Hc;
}
原文地址: https://www.cveoy.top/t/topic/beGJ 著作权归作者所有。请勿转载和采集!