一元多项式的加法数据结构C语言,数据结构C语言实现之一元多项式的表示及相加(2).pdf...

数据结构 C 语言实现之一元多项式的表示及相加 2 一元多项式的表示及相加 对于符号多项式的各种操作 实际上都可以利用线性表来处理 比较典型的是关于一元多项式的处理 在 数学上 一个一元多项式Pn x 可按升幂的形式写成 Pn x p0 p1x p2x2 p3x3 pnxn 它实际上可以由n 1个系数唯一确定 因此 在计算机内 可以用一个线性表P来表示 P p0 p1 p2 pn 其中每一项的指数则隐含在其系数的序号里了 假设Qm x 是一个元多项式 则它也可以用一个线性表Q来表示 即 Q q0 q1 q2 qm 若假设mcoef c s exp e rear next s 在当前表尾做插入 rear s scanf d d rear next NULL 将表的最后一个结点的next置NULL 以示表结束 return head 算法2 23 用尾插法建立一元多项式的链表 3 图2 19 所示为两个多项式的单链表 分别表示多项式A x 7 3x 9x8 5x17和多项式 B x 8x 22x7 9x8 polya polyb 图2 19 多项式的单链表表示法 多项式相加的运算规则是 两个多项式中所有指数相同的项的对应系数相加 若和不为零 则构成 和多 项式 中的一项 所有指数不相同的项均复抄到 和多项式 中 以单链表作为存储结构 并且和多项式 中的结点无需另生成 则可看成是将多项式B加到多项式A中 由此得到下列运算规则 设p q分别 指向多项式A B的一项 比较结点的指数项 若p expexp 则结点p 所指的结点应 是 和多项式 中的一项 令指针p后移 若p exp q exp 则结点q 所指的结点应是 和多项式 中的一项 将结点q插入在结点p之前 且令指针q在原来的链表上后移 若p exp q exp 则将两个结点中的系数相加 当和不为零时修改结点p的系数域 释放q结点 若和为零 则和多项式中无此项 从A中删去p结点 同时释放p和q结点 void polyadd Polylist polya Polylist polyb 此函数用于将两个多项式相加 然后将和多项式存放在多项式polya中 并将多项式ployb删除 Polynode p q pre temp int sum p polya next 令p和q分别指向polya和polyb多项式链表中的第一个结点 q polyb next pre polya pre指向和多项式的尾结点 while p NULL pre pre next p p next else if p exp q exp 若指数相等 则相应的系数相加 sum p coef q coef if sum 0 p coef sum pre next p pre pre next p p next temp q q q next free temp else temp p next free p p temp 若系数和为零 则删除结点p与q 并将指针指向下一个结点 temp q next free q q temp else pre next q pre pre next 将q结点加入到和多项式中 q q next if p NULL 多项式A中还有剩余 则将剩余的结点加入到和多项式中 pre next p else 否则 将B中的结点加入到和多项式中 pre next q 算法2 24 多项式相加 假设A多项式有M项 B多项式有N项 则上述算法的时间复杂度为O M N 图2 20所示为图2 19中两个多项式的和 其中孤立的结点代表被释放的结点 通过对多项式加法的介绍 我们可以将其推广到实现两个多项式的相乘 因为乘法可以分解为一系列的加 法运算 polya polyc 图2 20 多项式相加得到的多项式和

展开阅读全文

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值