//数据结构C语言版(清华大学_唐国民_第3版) //循环链表,书 P38 例子2.5.2 三元多项式加法,与书上代码有些许出入,不用在意,重要的是思路 //多项式按指数降序排序,这里的降序排序是指x,y,z分别对应的指数i,j,k,按i*100+j*10+k的和来降序排序 #include#include typedef struct LNode* List; struct LNode{ int coef; int index; List Next; }; List Create(List ); void Add(List,List); void Printout(List); int main() { List Ptrl_p,Ptrl_q; Ptrl_p=Create(Ptrl_p); Ptrl_q=Create(Ptrl_q); Add(Ptrl_p,Ptrl_q); Printout(Ptrl_q); return 0; } List Create(List Ptrl) { int n,i; List Pre,Cur; Ptrl=(List)malloc(sizeof(struct LNode)); Pre = Ptrl; Ptrl->coef=0; Ptrl->index=-1; printf("How many numbers dou you want to create? "); fflush(stdin); scanf("%d",&n); for(i=1;i<=n;++i){ List Cur=(List)malloc(sizeof(struct LNode)); printf("The %dth's coef is:t",i); fflush(stdin); scanf("%d",&Cur->coef); printf("The %dth's xyz index is:t",i); fflush(stdin); scanf("%d",&Cur->index); Pre->Next=Cur; Cur->Next=Ptrl; Pre=Cur; } return Ptrl; } void Add(List Ptrl_p,List Ptrl_q) { List p,q,Pre_q,Crea_q; p=Ptrl_p->Next; q=Ptrl_q->Next; Pre_q=Ptrl_q; while(p->index != -1){ while(p->index < q->index){ q=q->Next; Pre_q=Pre_q->Next; } if(p->index==q->index){ q->coef=p->coef + q->coef; if(q->coef == 0){ Pre_q->Next = q->Next; free(q); q=Pre_q->Next; p=p->Next; } else{ p=p->Next; q=q->Next; Pre_q=Pre_q->Next; } } else{ Crea_q=(List)malloc(sizeof(struct LNode)); Crea_q->coef=p->coef; Crea_q->index=p->index; Pre_q->Next=Crea_q; Crea_q->Next=q; p=p->Next; Pre_q=Pre_q->Next; } } } void Printout(List Ptrl_q){ int i=0; List Rear=Ptrl_q->Next; while(Rear->index != -1){ i++; printf("The %dth: coef is %dt index of xyz is %dn",i,Rear->coef,Rear->index); Rear=Rear->Next; } }



