写一段求一元多项式的减法
时间: 2024-03-26 18:39:40 浏览: 23
好的,以下是一段求一元多项式减法的代码:
```
// 定义多项式结构体
struct PolyNode {
int coef; // 系数
int exp; // 指数
struct PolyNode *next; // 指向下一个节点的指针
};
typedef struct PolyNode *Polynomial;
// 多项式的减法运算
Polynomial Subtraction(Polynomial P1, Polynomial P2) {
Polynomial result = (Polynomial)malloc(sizeof(struct PolyNode)); // 新建结果链表
Polynomial tail = result; // 指向结果链表的尾部
while (P1 && P2) {
if (P1->exp > P2->exp) { // 指数大于
tail->next = P1;
tail = P1;
P1 = P1->next;
} else if (P1->exp < P2->exp) { // 指数小于
P2->coef = -P2->coef; // 取相反数
tail->next = P2;
tail = P2;
P2 = P2->next;
} else { // 指数相等
int temp = P1->coef - P2->coef;
if (temp != 0) { // 系数不为0
tail->next = (Polynomial)malloc(sizeof(struct PolyNode));
tail = tail->next;
tail->coef = temp;
tail->exp = P1->exp;
}
P1 = P1->next;
P2 = P2->next;
}
}
while (P1) { // P1链表还有剩余项
tail->next = P1;
tail = P1;
P1 = P1->next;
}
while (P2) { // P2链表还有剩余项
P2->coef = -P2->coef; // 取相反数
tail->next = P2;
tail = P2;
P2 = P2->next;
}
tail->next = NULL;
return result->next;
}
```
以上代码中,我们新建一个结果链表result,并定义一个指向结果链表尾部的指针tail。接下来,我们使用while循环,依次比较两个多项式链表中的每一项,如果P1链表中的项的指数大于P2链表中的项的指数,则将P1链表中的项插入结果链表中;如果P1链表中的项的指数小于P2链表中的项的指数,则取P2链表中的项的系数的相反数,插入结果链表中;如果P1链表中的项的指数等于P2链表中的项的指数,则将两者的系数相减,如果相减结果不为0,则将新项插入结果链表中。最后,如果P1链表或P2链表还有剩余项,则将剩余项插入结果链表中。最后,我们将结果链表的尾部指向NULL,返回结果链表的头部。
希望对你有所帮助!