单链表实现一元多项式加法与乘法

程序运行结果:

在这里插入图片描述

实现原理

多项式加法:
(1)如果cpa的指数<cpb的指数,则将cpa所指向的插入和多项式链中,向后移动指针;
(2)如果cpa的指数>cpb的指数,则将cpb所指向的插入和多项式链中,向后移动指针;
(3)如果cpa的指数=cpb的指数,则若cpa的指数+cpb的指数=0,则删除相应结点,向后移动指针,并释放内存空间;
(4)否则cpa的指数+cpb的指数!=0,则修改同指数项的系数值,向后移动指针;
(5)如果pa链表非空,则链接pa剩余结点;
(6)如果pb链表非空,则链接pb剩余结点。

多项式乘法:
(1)多项式乘法可以看成单项式和多项式相乘,再作加法;
(2)可以利用循环,将被乘多项式与乘多项式每一项依次相乘;
(3)循环中每一次应累加部分积;
(4)循环结束时多项式相乘完成。

程序实现:

  1. 创建多项式,m为多项式的项数,当m为0时,函数只初始化头结点
void CreatePolyn(polynomial **p, int m){
   
    int i, data;
    int flag;
    polynomial *cp, *temp;
    (*p) = (polynomial *)malloc(sizeof(polynomial));
    (*p)->coef = 0.0;
    (*p)->expn = -1;
    (*p)->next = NULL;
    for(i = 1; i <= m; ++i){
   
        cp = *p;
        flag = 0; // 标志多项式中是否已经存在相同指数的多项式
        temp = (polynomial *)malloc(sizeof(polynomial));
        // 接收所输入的多项式的各项,默认各项指数互异 
        scanf("%f %d", &(temp->coef), &(temp->expn));
        while(cp->next && temp->expn > cp->next->expn){
   
            cp = cp->next;
        }
        if(cp->next && temp->expn == cp->next->expn){
   
            continue;// 如果已经存在相同指数的多项式,忽略该项
        }
        temp->next = cp->next;
        cp->next = temp;
    }
}
  1. 打印多项式,考虑多种特殊项的格式,均以最简形式打印
void 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值