线性表的应用---一元多项式的表示与相加

来源:互联网 发布:淘宝买家信用值 编辑:程序博客网 时间:2024/04/28 12:16

用尾插法建立一元多项式的链表

void polycreate(Polylist head){Polynode *rear, *s;int c,e;rear=head;                            /* rear 始终指向单链表的尾,便于尾插法建表*/scanf("%d,%d",&c,&e);                   /*键入多项式的系数和指数项*/while(c!=0)                            /*若c=0,则代表多项式的输入结束*/{s=(Polynode*)malloc(sizeof(Polynode));/*申请新的结点*/s->coef=c;s->exp=e;rear->next=s;/*在当前表尾做插入*/rear=s;scanf("%d,%d",&c,&e); }rear->next=NULL;/*将表的最后一个结点的next置NULL,以示表结束*/}

多项式相加

void  polyadd(Polylist polya, Polylist polyb)/*此函数用于将两个多项式相加,然后将和多项式存放在多项式polya中,并将多项式ployb删除*/{Polynode  *p, *q, *pre, *temp;int sum;p=polya->next;   /*令 p和q分别指向polya和polyb多项式链表中的第一个结点*/q=polyb->next;        pre=polya;  /* r指向和多项式的尾结点*/while (p!=NULL && q!=NULL) /*当两个多项式均未扫描结束时*/{ if  (p->exp < q->exp)/*如果p指向的多项式项的指数小于q的指数,将p结点加入到和多项式中*/{ pre->next=p;  pre=p; p=p->next;}elseif ( p->exp == q->exp)  /*若指数相等,则相应的系数相加*/{  sum=p->coef + q->coef;if (sum != 0){ p->coef=sum;pre->next=p; pre=p;p=p->next;temp=q; q=q->next; free(temp);}else{  temp=p;p=p->next;free(temp); /*若系数和为零,则删除结点p与q,并将指针指向下一个结点*/temp=q; q=q->next;free(temp);}}else{  pre->next=q;pre=q; /*将q结点加入到和多项式中*/q = q->next; }}if(p!=NULL)  /*多项式A中还有剩余,则将剩余的结点加入到和多项式中*/pre->next=p;else      /*否则,将B中的结点加入到和多项式中*/pre->next=q;}


1 0