您的位置:首页 > 编程语言

循环链表实现两个多项式相加主要代码

2013-05-23 04:18 281 查看
A=a1+b1*X+c1*X^2+d1*X^3+...

B=a2+b2*X+c2*X^2+d2*X^3+...

C=(a1+a2)+(b1+b2)*X+(c1+c2)*X^2+(d1+d2)*X^3+...

typedef int datatype;

typedef struct node{
float coef;//系数
int exp;//指数
struct pnode *next;
} polynode;
polynode *POLYADD(polynode *A,polynode *B){//A,B是两个多项式,函数返回A,B的多项式
int i,j,k;
polynode *ptr,
*q,     //指向和多项式C的指针
*q1,    //指向A多项式的指向
*q2;    //指向B多项式的指向
float x;
q1=A;
q2=B;
q=malloc(sizeof(polynode));   //生成多项式的头节点
q->coef=0;                    //将多项式的头节点赋值
q->exp=-1;
q->next=q;                    //循环链表
ptr=q;                        //ptr指向和多项式的头节点
q1=q1->next;                  //q1指向A的第一个节点
q2=q2->next;                  //q2指向B的第一个节点
while((q1!=A)&&(q2!=B)){
//从低指数到搞指数逐项求和
if(q1->exp==q2->exp){     //指数相同的项
x=q1->coef+q2->coef;   //系数相加
if(x!=0){
q->next=malloc(sizeof(polynode));
q=q->next;
q->coef=x;
q->exp=q1->exp;
}
q1=q1->next;              //q1指向A的下一个节点
q2=q2->next;              //q2指向B的下一个节点
}
else{
//指向不同的项
q->next=malloc(sizeof(polynode));
q=q->next;
if(q1->exp>q2->exp){   //如果A多项式当前项的指数大于B的
q->coef=q2->coef;
q->exp=q2->exp;
q2=q2->next;
}
else{
q->coef=q1->coef;  //如果B多项式当前项的指数大于A的
q->exp=q1->exp;
q1=q1->next;
}
}
}
while(q1!=A){
q->next=malloc(sizeof(polynode));
q=q->next;
q->coef=q1->coef;
q->exp=q1->exp;
q1=q1->next;
}
while(q2!=B){
q->next=malloc(sizeof(polynode));
q=q->next;
q->coef=q2->coef;
q->exp=q2->exp;
q2=q2->next;
}
q->next=ptr;   //令多项式最末的节点指向头节点
return ptr;    //返回多项式头节点指针
}


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: