用链式线性表实现两个一元多项式相加

#include <iostream>
#include <cstdlib>
#include <cstdio>

using namespace std;

typedef struct PolyNode {
int coef;
int exp;
PolyNode *next;
}node;

node * CreatPoly(){
     PolyNode *h,*tail,*s;
     int coef,exp;
     h=( PolyNode *)malloc(sizeof(node));
     h->next=NULL;
     tail=h;
     cout<<"coef,exp: ";
     scanf("%d,%d",&coef,&exp);
     while (coef){
        PolyNode *s=( PolyNode *)malloc (sizeof(node));
            s->coef=coef;
            s->exp=exp;
            s->next=tail->next;
            tail->next=s;
            tail=s;

               cout<<"coef,exp: ";
               scanf("%d,%d",&coef,&exp);
     }
     return h;

}

void PolyAdd(node *Polya,node *Polyb){
   node *p,*q,*pre,*temp;
   p=Polya->next;
    q=Polyb->next;
     pre=Polya;
     int sum;
     while (p&&q){
              if(p->exp < q->exp){
                            pre->next = p;
                            pre = p;
                            p = p->next;
              }else if(p->exp > q->exp){
                         pre->next = q;
                            pre = q;
                            q = q->next;
              }
              else{

                            sum=p->coef + q->coef ;
                            if(sum){
                                          p->coef=sum;
                                          pre->next=p;
                                          pre=p;
                                          p=p->next;
                                          temp=q->next;
                                          free(q);
                                          q=temp;
                            }else{
                                 temp=p->next;
                                 free(p);
                                 p=temp;

                                 temp=q->next;
                                 free(q);
                                 q=temp;

                            }
              }

     }
     pre->next = p ? p:q;

}

int PrintPoly(node *h){
   node *p=h->next;
   while (p){
           printf("%d*x^%d ",p->coef,p->exp);
              p=p->next;
   }
   cout<<endl;
   return 1;
}
int main()
{
    node *Polya,*Polyb;
    cout<<"请输入第一个一元多项式的系数和指数(假定以输入系数为0来结束)"<<endl;
    Polya= CreatPoly();
    cout<<"请输入的第一个一元多项式为"<<endl;
    PrintPoly(Polya);
     cout<<"请输入第二个一元多项式的系数和指数(假定以输入系数为0来结束)"<<endl;
     Polyb= CreatPoly();
     cout<<"请输入的第二个一元多项式为"<<endl;
    PrintPoly(Polyb);
     cout<<"这两个一元多项式相加后的结果为"<<endl;
     PolyAdd(Polya,Polyb);
      PrintPoly(Polya);
    return 0;
}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值