【线性表】一元多项式的运算

1、建立一元多项式的链式存储结构

Polylist polycreate(Polylist head){
    Polylist *rear, *new_node;
    int c,e;
    rear=head=(Polynode *)malloc(sizeof(Polynode));
    cin>>c>>e;//输入系数和指数
    while(c!=0){
        //建立新项
        new_node=(Polynode)malloc(sizeof(Polynode));
        new_node->coef=c;
        new_node->exp=e;
        //尾插
        rear->next=new_node;
        rear=s;
        cin>>c>>e;
    }
    rear->next=NULL;
    return (head);
}

2、两个一元多项式相加

思路:将两个多项式从头扫描,指数相同项相加,如果为0则释放该空间,如果非0则构成一项,最终指数不同的项按指数升序排列。
用变量p、q分别指向链A、B中的第一结点,把结果存放在A中。若p->next < q->next 说明p是其中一项,p后移;若p->next > q->next 说明q是其中一项,q后移。

void polyadd(Polylist a, Polylist b){
    Polynode *p=a->next, *q=b->next, *tail=a;
    while(p!=NULL&&q!=NULL){
        if(p->exp<q->exp){
            //尾插p
            tail->next=p; tail=p; p=p->next;
        }else if(p->exp==q->exp){
            if((sum=p->coef+q->coef)!=0){
                p->coef=sum;
                //尾插
                tail->next=p; tail=p; p=p->next;
                //删除q
                temp=q; q=q->next; free(temp);
            }else{
                temp=p; p=p->next; free(temp);
                temp=q; q=q->next; free(temp);
            }
        }else if(p->exp>q->exp){
            //尾插q
            tail->next=q; tail=q; q=q->next; 
        }
    }
    //A B还有剩
    if(p) pre->next=p;
    else pre->next =q;
}
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mr.zwX

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值