多项式的加法运算:
运算原理:
- 对于运算后的多项式,需要一个front记录链表第一个结点,rear记录链表最后一个结点,同时需要一个temp临时结点,用于最后释放指向链表第一个结点的头结点
- 首先为front和rear申请同一个内存空间,然后进入循环比较p1多项式与p2多项式的第一项,如果p1第一项指数大于p2第一项指数,即case=1,则通过Attach函数把p1第一项拷贝下来,Attach函数有三个参数:系数,指数和把该项接到rear后面,最后p1挪向下一项
- case -1和0同理,但case 0时需要把系数相加,和为0则不拷贝,和不为0则拷贝
- 如果其中一个多项式已经挪到末尾,另一个多项式剩下的项直接拷贝下来即可,所以需要两个for循环,终止条件是多项式为空
- 收尾工作:将rear指向NULL,将链表头结点front赋值给temp,fornt指向链表第一个结点,并将临时结点temp(链表的头结点)释放
- 注意这里的pRear是指针的指针,则*pRear是指针
多项式的乘法运算
- 先用p1第一项乘以p2得到初始多项式,接下来通过嵌套的while循环计算p1当前项*p2当前项,并插入到初始多项式里,因此需要实现往一个有序数列里插入一个新的元素,使其指数依然呈现递减的趋势
具体操作
- 用while循环来比较要插入的项的指数与已有多项式每一项的指数大小,直到等于或大于已有多项式的当前项
- 如果等于已有多项式的当前项,则合并同类项,合并后如果系数不为0,则改变系数即可,如果系数为0,则需要一个新结点t来表示该项,实现删除操作
- 如果大于已有多项式的当前项,则实现插入操作,同样需要用到一个新结点t
- 最后的收尾工作,一开始有一个临时的头结点P,现在需要一个t2结点来代替该结点,并使P挪到链表的第一个结点,把t2释放掉即可
多项式的输出:
- 由多项式的输出要求:系数 指数 空格 系数 指数 空格…,可以看成第一项前面不需要输出空格,后面每一项的前面都要输出空格,于是可以用一个flag来判别是否为第一项