浙江大学数据结构(2.4多项式的加法运算实现)

多项式的加法运算

  P1=3X^5+4X^4- X^3         +2X-1

+P2=          2X^4+X^3-7X^2+  X

    P=3X^5+6X^4        -7X^2+3X-1

主要思路:相同指数的项系数相加,其余部分进行拷贝。

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

struct PolyNode
{
 int coef;  //系数
 int expon;  //指数
 struct PolyNode *link;  //指向下一个节点的指针
};
typedef struct PolyNode *Polynomial;
Polynomial P1,P2;

int Compare(int expon1,int expon2)
{
 if (expon1>expon2)
    return 1;
 if (expon1==expon2)
    return 0;
 if (expon1==expon2)
    return -1;
}
void Attach(int coef,int expon,Polynomial *PTRrear)
{
 Polynomial P;
 P=(Polynomial)malloc(sizeof(struct PolyNode));
 P->coef=coef;
 P->expon=expon;
 (*PTRrear)->link=P;
 P->link=NULL;
 *PTRrear=P;
}

Polynomial PloyAdd(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))
               {
                case1:
                      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;
}

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值