用c语言实现一元多项式加法运算
时间: 2023-05-29 21:06:52 浏览: 126
#include <stdio.h>
#include <stdlib.h>
struct node {
int coef; // 系数
int exp; // 指数
struct node *next; // 下一个节点指针
};
typedef struct node Node;
typedef Node *NodePtr;
// 创建一个新节点
NodePtr createNode(int coef, int exp) {
NodePtr node = (NodePtr) malloc(sizeof(Node));
node->coef = coef;
node->exp = exp;
node->next = NULL;
return node;
}
// 插入一个节点到多项式中
void insertNode(NodePtr *head, NodePtr node) {
if (*head == NULL) {
*head = node;
} else {
NodePtr cur = *head;
while (cur->next != NULL) {
cur = cur->next;
}
cur->next = node;
}
}
// 打印多项式
void printList(NodePtr head) {
while (head != NULL) {
printf("%dx^%d", head->coef, head->exp);
if (head->next != NULL) {
printf(" + ");
}
head = head->next;
}
printf("\n");
}
// 释放多项式的所有节点
void freeList(NodePtr head) {
NodePtr cur = head;
while (head != NULL) {
cur = head;
head = head->next;
free(cur);
}
}
// 一元多项式加法运算
NodePtr add(NodePtr p1, NodePtr p2) {
NodePtr head = NULL;
while (p1 != NULL && p2 != NULL) {
if (p1->exp == p2->exp) { // 指数相同,系数相加
int coef = p1->coef + p2->coef;
if (coef != 0) { // 如果系数不为0,插入新节点
insertNode(&head, createNode(coef, p1->exp));
}
p1 = p1->next;
p2 = p2->next;
} else if (p1->exp > p2->exp) { // p1的指数更大,插入p1的节点
insertNode(&head, createNode(p1->coef, p1->exp));
p1 = p1->next;
} else { // p2的指数更大,插入p2的节点
insertNode(&head, createNode(p2->coef, p2->exp));
p2 = p2->next;
}
}
// 处理剩余节点
while (p1 != NULL) {
insertNode(&head, createNode(p1->coef, p1->exp));
p1 = p1->next;
}
while (p2 != NULL) {
insertNode(&head, createNode(p2->coef, p2->exp));
p2 = p2->next;
}
return head;
}
int main() {
// 多项式1: 3x^3 + 2x^2 + x^0
NodePtr p1 = createNode(3, 3);
insertNode(&p1, createNode(2, 2));
insertNode(&p1, createNode(1, 0));
printf("p1 = ");
printList(p1);
// 多项式2: 4x^4 + 2x^2 + 1x^0
NodePtr p2 = createNode(4, 4);
insertNode(&p2, createNode(2, 2));
insertNode(&p2, createNode(1, 0));
printf("p2 = ");
printList(p2);
// 多项式加法
NodePtr p3 = add(p1, p2);
printf("p3 = ");
printList(p3);
// 释放内存
freeList(p1);
freeList(p2);
freeList(p3);
return 0;
}
阅读全文