链表实现多项式加法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了链表实现多项式加法相关的知识,希望对你有一定的参考价值。
#include<stdio.h> #include<stdlib.h> typedef struct Polynode*Polynomial; struct Polynode{ int coef; int expon; Polynomial link; }; int Compare(int e1,int e2); void attach(int c,int e,Polynomial*reat); Polynomial ReadPoly(); Polynomial add(Polynomial P1,Polynomial P2); void PrintPoly(Polynomial P); int main(){ Polynomial P1,P2,PP; P1= ReadPoly(); P2=ReadPoly(); PP=add(P1,P2); PrintPoly(PP); return 0; } int Compare(int e1,int e2){ if(e1>e2) return 1; else if(e1<e2) return -1; else return 0; } void attach(int c,int e,Polynomial*reat){ Polynomial P; P=(Polynomial)malloc(sizeof(struct Polynode)); P->coef=c; P->expon=e; P->link=NULL; (*reat)->link=P; *reat=P; } Polynomial ReadPoly(){ int N,c,e; Polynomial P,rear,t; P=(Polynomial)malloc(sizeof(struct Polynode)); P->link=NULL; rear=P; scanf("%d",&N); while(N--){ scanf("%d %d",&c,&e); attach(c,e,&rear); } t=P;P=P->link;free(t); return P; } Polynomial add(Polynomial P1,Polynomial P2){ int sum; Polynomial front,rear,temp; front=(Polynomial)malloc(sizeof(struct Polynode)); rear=front; while(P1&&P2){ switch (Compare(P1->expon,P2->expon)){ case 1: attach(P1->coef,P1->expon,&rear); P1=P1->link; break; case -1: attach(P2->coef,P2->expon,&rear); P2=P2->link; break; case 0: sum=P1->coef+P2->coef; attach(sum,P1->expon,&rear); P1=P1->link; P2=P2->link; break; } } for(;P1;P1=P1->link)attach(P1->coef,P1->expon,&rear); for(;P2;P2=P2->link)attach(P2->coef,P2->expon,&rear); rear->link=NULL; temp=front; front=front->link; free(temp); return front; } 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; } }
特别注意attach这个函数:
void attach(int c,int e,Polynomial*reat){ Polynomial P; P=(Polynomial)malloc(sizeof(struct Polynode)); P->coef=c; P->expon=e; P->link=NULL; (*reat)->link=P; *reat=P; }
其中一个参数Polynomial*reat,使用的地址的地址,如果是只用Polynomial型,那么相当于只是传递进来一个地址值,函数调用完后就会释放掉形参的地址,因此链表的尾部不会变化,因此需要用Polynomial*reat类型。
以上是关于链表实现多项式加法的主要内容,如果未能解决你的问题,请参考以下文章