数据结构复习笔记(C语言)--一元多项式的加法与乘法

一元多项式的加法

两个一元多项式相加,指数相等的情况下系数相加,例如:

(3X^5+4X^2-1)+(2X^4+2X^2-X)

在链表的每一个节点中,保存每一项的指数以及系数,同时使用节点指针指向下一个低次项,定义数据结构如下:

struct PolyNode{
    int coef;
    int expon;
    struct PolyNode *link;
};
typedef struct PolyNode *Polynomial;
复制代码

算法定义:

循环的比较两个多项式中的每一项的次数,如果 A 节点的次数大于 B 节点的次数那么将 A 节点插入结果链表,同时将 A 节点指向下一个节点,如果 A 节点的次数等于 B 节点的次数,那么将两个节点的系数相加,将系数和以及 A(B) 节点的次数插入新的链表。

代码实现:

int Compare(int A, int B){
   int result;
   if(A>B){
       result=1;
   }else if(A==B){
       result=0;
   }else{
       result=-1;
   }
   return result;
}
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;
}

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;
           default:
               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;
}
复制代码
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值