- 测试用的多项式
p1 = 2x^2 + 3x + 1
p2 = -2x + 3
p1 + p2 可以得到: 2x^2 + x + 4
- 节点定义
struct ployNode{
int coef; // 系数
int expon; // 指数
struct ployNode *next; // 指向下一个指针
};
typedef struct ployNode ploynomial;
- 思路
主要是看指数的大小,进行对应项的合并。有下面三种情况:
p1->expon == p2->expon : 将对应的系数相加(不为零的话),得到新节点存入pResult , p1,p2后移一个节点
p1->expon > p2->expon : p1 存入pResult,p1后移, p2不动
p1->expon < p2->expon : p2 存入pResult,p2后移, p1不动
当p1和p2其中一个全部遍历完成之后,将另一个直接连到新链表的最后即可
多项式相加的核心函数:ploynomial* ployAdd(ploynomial *p1, ploynomial *p2)
input:p1,p2【两个多项式指针】 。返回相加之后的多项式指针。
ploynomial* ployAdd(ploynomial *p1, ploynomial *p2) {
ploynomial *front,*rear;
front = (ploynomial*)malloc(sizeof(ploynomial));
if(!front){
printf("malloc error!!\n");
}
rear = front; // 存储结果链表当中首尾指针
int sum;
while(p1 && p2){
switch(compare(p1->expon , p2->expon)){
case 1:
// 大于的情况
append(p1->coef,p1->expon,&rear);
p1 = p1->next;
break;
case 0:
// 等于的情况
sum = p1->coef + p2->coef;
if(sum != 0) append(sum,p1->expon,&rear);
p1 = p1->next;
p2 = p2->next;
break;
case -1:
// 小于的情况
append(p2->coef , p2->expon,&rear);
p2 = p2->next;
break;
}
}
// 处理剩余项
for( ; p1; p1 = p1->next)
append(p1->coef,p1->expon,&rear);
for( ; p2; p2 = p2->next)
append(p2->coef,p2->expon,&rear);
rear->next = NULL;
return front->next;
}
// 处理存入pResult的节点
void append(int coef,int expon, ploynomial **rear){
ploynomial *p = (ploynomial*)malloc(sizeof(ploynomial));
if(!p) printf("malloc error!! line71\n");
p->coef = coef;
p->expon = expon;
p->next = NULL;
// rear 是指针的地址
// (*rear) 和 p是等价的
(*rear)->next = p;
*rear = p;
}
int compare(int a, int b){
if(a == b) return 0;
return a>b?1:-1;
}
int main(){
ploynomial *p1 ;
ploynomial item1 = {2,2,NULL};
ploynomial item2 = {3,1,NULL};
ploynomial item3 = {1,0,NULL};
item1.next = &item2;
item2.next = &item3;
p1 = &item1;
ploynomial *p2 ;
ploynomial item4 = {-2,1,NULL};
ploynomial item5 = {3,0,NULL};
item4.next = &item5;
p2 = &item4;
ploynomial *result = ployAdd(p1,p2);
for(; result; result = result->next){
printf("coef: %d, expon: %d\n",result->coef,result->expon);
}
return 0;
}
学习的是mooc上的浙江大学数据结构课程 链接