1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
| poly_pointer padd(poly_pointer a,poly_pointer b){
poly_pointer front,rear,temp;
int sum;
rear = (poly_pointer)malloc(sizeof(poly_node));
// if (IS_FULL(rear)){
// fprintf(stderr, "full");
// exit(1);
// }
front = rear;
while(a && b) {
switch(COMPARE(a->expon,b->expon)){
case -1:
attach(b->coef, b->expon, &rear);
b=b->link;
break;
case 0:
sum = a->coef + b->coef;
if(sum) attach(sum, a->expon, &rear);
a=a->link;b=b->link;
break;
case 1:
attach(a->coef, a->expon, &rear);
a=a->link;
break;
}
}
for(;a;a=a->link) attach(a->coef, a->expon, &rear);
for(;b;b=b->link) attach(b->coef, b->expon, &rear);
rear->link=NULL;
temp = front;
front=front->link; //去掉表头空节点
free(temp);
return front;
}
void attach(float coefficient,int exponent,poly_pointer *ptr){
poly_pointer temp;
temp = (poly_pointer)malloc(sizeof(poly_node));
// if(IS_FULL()){
// fprintf(stderr, "full");
// exit(1);
// }
temp->coef= coefficient;
temp->expon= exponent;
(*ptr)->link = temp; //第一次执行时造成ptr为空
*ptr = temp;
}
|