用c语言指针写出链表结构的一元多项式的表示及相加算法
时间: 2024-09-12 11:15:15 浏览: 100
在C语言中,链表是一种常用的数据结构,可以用来表示一元多项式。每个节点代表多项式中的一个项,包含系数(coefficient)、指数(exponent)和指向下一个节点的指针(next)。
首先,定义链表节点的结构体:
```c
typedef struct PolyNode {
int coef; // 系数
int exp; // 指数
struct PolyNode *next; // 指向下一个节点的指针
} PolyNode, *Polynomial;
```
创建一个多项式节点的函数:
```c
PolyNode* createNode(int coef, int exp) {
PolyNode *node = (PolyNode*)malloc(sizeof(PolyNode));
if (node) {
node->coef = coef;
node->exp = exp;
node->next = NULL;
}
return node;
}
```
然后,我们需要一个函数来创建多项式,并初始化为0:
```c
Polynomial createPolynomial() {
Polynomial poly = (Polynomial)malloc(sizeof(PolyNode));
if (poly) {
poly->next = NULL;
}
return poly;
}
```
插入节点到多项式链表的函数(按照指数递减顺序):
```c
void insertNode(Polynomial *poly, int coef, int exp) {
PolyNode *newNode = createNode(coef, exp);
if (!newNode) return;
PolyNode *current = *poly;
while (current->next && current->next->exp > exp) {
current = current->next;
}
if (current->next && current->next->exp == exp) {
// 如果指数相同,合并系数
current->next->coef += coef;
} else {
// 插入新节点
newNode->next = current->next;
current->next = newNode;
}
}
```
多项式相加算法:
```c
Polynomial addPolynomials(Polynomial poly1, Polynomial poly2) {
Polynomial result = createPolynomial();
PolyNode *p1 = poly1->next;
PolyNode *p2 = poly2->next;
while (p1 && p2) {
if (p1->exp > p2->exp) {
insertNode(&result, p1->coef, p1->exp);
p1 = p1->next;
} else if (p1->exp < p2->exp) {
insertNode(&result, p2->coef, p2->exp);
p2 = p2->next;
} else {
insertNode(&result, p1->coef + p2->coef, p1->exp);
p1 = p1->next;
p2 = p2->next;
}
}
// 将剩余的项插入结果多项式中
while (p1) {
insertNode(&result, p1->coef, p1->exp);
p1 = p1->next;
}
while (p2) {
insertNode(&result, p2->coef, p2->exp);
p2 = p2->next;
}
// 释放头节点
free(poly1);
free(poly2);
return result;
}
```
请注意,上述代码仅提供了基本的链表操作和多项式相加的逻辑框架,实际使用时需要包含必要的错误检查和内存管理。
阅读全文