应用实例


《一》多项式的加法运算实现

P1=3X5+4X4-X3+2X-1

P2=2X4+X3-7X2+X

P=3X5+6X4-7X2+3X-1

多项式加法运算

采用不带头节点的单向链表,按照指数递减的顺序排列各项

struct PolyNode{

           int coef;//系数

           int expon;//指数

           struct PolyNode *link; //指向下一个结点的指针

  };
typedef struct PolyNode *Polynomial;
Polynomial P1,P2;

算法思路:两个指针P1和P2分别指向这两个多项式第一个结点,不断循环;

*P1->expon==P2->expon:系数相加,若结果不0,则作为结果多项式对影响的系数。同时,P1和P2都分别指向下一项;

*P1->expon>P2->expon:P1的当前项存入结果多项式,并使P1指向下一项;

*P1->exponexpon:将P2的当前项存入结果多项式,并使P2指向下一项;

当某一项处理完时,将另一个多项式的所有节点依次复制到结果多项式中去。

Polynomial PolyAdd(Polynomial P1,Polynomial P2)
{ 
   Polynomial front,rear,temp;
    int sum;
    rear=(Polynomial)malloc(sizeof(struct PolyNode));
    front=rear;
    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;
               if(sum)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 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;
}