循环链表实现两个多项式相加主要代码
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+...
View Code
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
相关文章推荐
- 顺序表链式结构实现多项式相加。参照《数据结构》中的伪代码
- 编程实现任意长度的两个正整数相加 代码实现
- 两个多项式相乘和相加的java实现
- 使用链表实现两个多项式相加和相乘
- java编程实现两个大数相加代码示例
- PAT-线性结构:两个多项式相加运算 C实现
- 两个超大正整数相加问题之链表实现(代码惨不忍睹,慎进)
- C++实现两个多项式相加
- 用链式线性表实现两个一元多项式相加
- (链表实现)写出两个一元多项式相加的算法
- 用单链表实现一元多项式相加 C++代码
- (链表实现)写出两个一元多项式相加的算法
- (链表实现)写出两个一元多项式相加的算法
- 利用栈实现两个一元多项式相加
- 两个一元多项式相加(链表 || 顺序表实现)
- 网络爬虫(五)------------简单网络爬虫实现代码,记得要添加htmlpaser和htmlclient两个包
- 基于JAVA的不借助第三个变量实现交换两个变量的值的小代码
- MFC中将编辑框文本转换成整数,从而实现两个整数相加。
- jquery中加载图片自适应大小主要实现代码
- 利用位运算实现两个整数相加