数据结构之多项式
下面是对多项式的基本输入和输出
#include "stdio.h" #include "stdlib.h" typedef struct PolyNode *Polynomial; struct PolyNode { int coef; int expon; Polynomial link; }; Polynomial ReadPoly(void); Polynomial Mult(Polynomial P_1,Polynomial P_2); Polynomial Add(Polynomial P_1,Polynomial P_2); void PrintPoly(Polynomial P); void Attach(int c,int e,Polynomial *pRear); int main(void) { Polynomial P1; P1=ReadPoly(); PrintPoly(P1); wait(60); return 0; } Polynomial ReadPoly(void)//读取多项式 { 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; } void Attach(int c,int e,Polynomial *pRear) { Polynomial P; P=(Polynomial)malloc(sizeof(struct PolyNode)); P->coef=c; P->expon=e; P->link=NULL; (*pRear)->link=P; *pRear=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; } }
下面是多项式加法部分
Polynomial Add(Polynomial P_1,Polynomial P_2) { Polynomial P_Add,front,temp; int sum; P_Add=(Polynomial)malloc(sizeof(struct PolyNode)); front=P_Add; while(P_1&&P_2) { if(P_1->expon > P_2->expon) { Attach(P_1->coef, P_1->expon, &P_Add); P_1 = P_1->link; } else if(P_1->expon < P_2->expon) { Attach(P_2->coef, P_2->expon, &P_Add); P_2 = P_2->link; } else if(P_1->expon == P_2->expon) { sum = P_1->coef+P_2->coef; if(sum)Attach(sum, P_2->expon, &P_Add); P_2 = P_2->link; P_1 = P_1->link; } } for(;P_1;P_1=P_1->link) Attach(P_1->coef, P_1->expon, &P_Add); for(;P_2;P_1=P_2->link) Attach(P_2->coef, P_2->expon, &P_Add); P_Add->link=NULL; temp=front; front=front->link; free(temp); return front; }