一元多项式加法与乘法运算链表实现
2017-01-29 01:56
591 查看
typedef struct PolyNode *Polynomial; struct PolyNode{ int coef;//系数 int expon;//指数 Polynomial link;/*指向下一个结点的指针*/ }; Polynomial P,Rear,t1,t2,t;//这句一定要写 int main() { Polynomial P1,P2,PP,PS; P1=ReadPoly(); P2=ReadPoly(); PP=Mult(P1,P2); PrintPoly(PP); PS=Add(P1,P2); PrintPoly(PS); return 0; } void Attach(int c,int e,Polynomial *pRear)//*pRear是指针的指针 { Polynomial P; P=(Polynomial)malloc(sizeof(struct PolyNode)); P->coef=c;//对新结点赋值 P->expon=e; P->link=NULL; (*pRear)->link=P; *pRear=P;//修改pRear的值 } Polynomial ReadPoly()//读入多项式 { Polynomial P,Rear,t; int c,e,N; scanf("%d",&N); P=(Polynomial)malloc(sizeof(struct PolyNode));//链表头空结点 P->link=NULL; Rear=P; while(N--){ scanf("%d %d",&c,&e); Attach(c,e,&Rear);//将当前插入多项式尾部 } t=P;P=P->link; free(t);//删除临时生成的头结点 return P; } Polynomial Mult(Polynomial P1,Polynomial P2)//如何将两个多项式相乘 { Polynomial P,Rear,t1,t2,t; int c,e; if(!P1||!P2) return NULL; t1=P1;t2=P2; P=(Polynomial)malloc(sizeof(struct PolyNode)); P->link=NULL; Rear=P; while(t2){//先用P1的第一项乘以P2,得到P Attach(t1->coef*t2->coef,t1->expon+t2->expon,&Rear); t2=t2->link; } t1=t1->link; while(t1){ t2=P2;Rear=P; while(t2){ e=t1->expon+t2->expon; c=t1->coef*t2->coef; while(Rear->link&&Rear->link->expon>e) Rear=Rear->link; if(Rear->link&&Rear->link->expon==e){ if(Rear->link->coef+c) Rear->link->coef+=c; else{ t=Rear->link; Rear->link=t->link; free(t); } } else{t=(Polynomial)malloc(sizeof(struct PolyNode)); t->coef=c;t->expon=e; t->link=Rear->link; Rear->link=t;Rear=Rear->link; } t2=t2->link; } t1=t1->link; } t2=P;P=P->link;free(t2); return P; } void PrintPoly(Polynomial P) {//输出多项式 int flag=0;//辅助调整输出格式用 if(!P) {printf("0 0\n"); return;} while(P){ if(!flag) flag=1; else printf(" "); printf("%d %d",P->coef,P->expon); P=P->link; } printf("\n"); }
相关文章推荐
- 一元多项式的乘法与加法运算——链表实现
- 7-1(链表) 一元多项式的乘法与加法运算(20 point(s))
- java单链表实现一元多项式加法和乘法运算
- 用链表实现一元多项式的加法运算
- 多项式乘法与加法运算(链表实现)
- 一元多项式的加法和乘法运算(Java实现)——浙大数据结构(陈越)
- 【数据结构_链表_List_1040】一元多项式加法运算的实现
- 多个有序链表的合并[续]---一元多项式的乘法与加法运算
- PAT 一元多项式的乘法与加法运算(链表 c++版)
- 一元多项式的乘法与加法运算【Java实现--通过单项链表实现队列】
- PAT 一元多项式的乘法与加法运算(链表 c++版)
- PAT 3-04 一元多项式的乘法与加法运算(C语言实现)
- 链表实现多项式加法和乘法(C语言实现)
- 用链表实现一元多项式的加、减、乘、求导运算
- 一元多项式的乘法与加法运算 【STL-map哈希-map反向迭代器遍历 + 零多项式】
- C语言:用链表实现一元多项式的加法
- 3-04. 一元多项式的乘法与加法运算(20)(ZJU_PAT 结构体)
- 多项式加法运算 使用链表实现
- 线性链表实现一元多项式的加法运算
- PAT 一元多项式的乘法与加法运算(20)(模拟计算过程)