c语言多项式 'A' 和 'B' 相加( 多项式链表中指数必须由小到大排列 )
时间: 2023-12-26 22:03:49 浏览: 43
可以按照以下步骤实现:
1. 定义一个结构体来表示多项式的每一项,包括系数和指数。
```c
typedef struct PolyNode{
int coef; // 系数
int expon; // 指数
struct PolyNode *next; // 指向下一项的指针
}PolyNode, *Polynomial;
```
2. 定义一个函数来创建多项式链表。
```c
Polynomial createPoly(){
Polynomial p, last, t;
int n, c, e;
p = (Polynomial)malloc(sizeof(PolyNode));
p->next = NULL;
last = p;
scanf("%d", &n); // 输入项数
while(n--){
scanf("%d %d", &c, &e); // 输入系数和指数
t = (Polynomial)malloc(sizeof(PolyNode));
t->coef = c;
t->expon = e;
t->next = NULL;
last->next = t;
last = t;
}
return p;
}
```
3. 定义一个函数来对两个多项式进行相加。
```c
Polynomial addPoly(Polynomial A, Polynomial B){
Polynomial p, t1, t2, last, t;
p = (Polynomial)malloc(sizeof(PolyNode));
p->next = NULL;
last = p;
t1 = A->next;
t2 = B->next;
while(t1 && t2){
if(t1->expon < t2->expon){ // A 的指数小于 B 的指数
t = (Polynomial)malloc(sizeof(PolyNode));
t->coef = t1->coef;
t->expon = t1->expon;
t->next = NULL;
last->next = t;
last = t;
t1 = t1->next;
}
else if(t1->expon > t2->expon){ // A 的指数大于 B 的指数
t = (Polynomial)malloc(sizeof(PolyNode));
t->coef = t2->coef;
t->expon = t2->expon;
t->next = NULL;
last->next = t;
last = t;
t2 = t2->next;
}
else{ // A 和 B 的指数相等
if(t1->coef + t2->coef != 0){ // 系数相加不为 0
t = (Polynomial)malloc(sizeof(PolyNode));
t->coef = t1->coef + t2->coef;
t->expon = t1->expon;
t->next = NULL;
last->next = t;
last = t;
}
t1 = t1->next;
t2 = t2->next;
}
}
while(t1){ // A 有剩余项
t = (Polynomial)malloc(sizeof(PolyNode));
t->coef = t1->coef;
t->expon = t1->expon;
t->next = NULL;
last->next = t;
last = t;
t1 = t1->next;
}
while(t2){ // B 有剩余项
t = (Polynomial)malloc(sizeof(PolyNode));
t->coef = t2->coef;
t->expon = t2->expon;
t->next = NULL;
last->next = t;
last = t;
t2 = t2->next;
}
return p;
}
```
4. 在主函数中调用以上函数。
```c
int main(){
Polynomial A, B, C;
A = createPoly(); // 输入多项式 A
B = createPoly(); // 输入多项式 B
C = addPoly(A, B); // A 和 B 相加得到 C
return 0;
}
```
需要注意的是,输入多项式时要按照指数由小到大的顺序输入。如果输入的多项式没有按照指数排序,可以在输入完后先进行排序再进行相加。