设有一元多项式Am(x)和Bn(X),编程实现多项式Am(x)和Bn(x)的加法、减法和乘法运算。其中多项式描述为:
Am(x)=A0+A1x1+A2x2+A3x3+….+Amxm;
Bn(x)=B0+B1x1+B2x2+B3x3+….+Bnxn。
(代码参考浙江大学数据结构和网上,以及加入了自己的一些理解)
我当时卡在升降幂排序问题上,升降幂的大致思路是,s申请结点输入数据,p为头指针(空指针),p1是p的下一个指针(也就是第一个有数据的指针),当前输入的s和p1比较expon,(这里以降幂为例),若s的expon小于p1的expon,p1移动至下一个,p2(一开始也指向空的头结点)也随之移动,令q=p2,也就是q记录当前有最大expon的结点;若s的expon大,则返回,将s的next指向p1结点(s大,因此是降幂),将q的next指向s(q是上一个最大的expon,因此q大于s);相等就加在一起,然后再输入新的s。
(还有一个LocateElem函数里的参数传递问题,当时不理解(Polynomial p, Polynomial s, Polynomial &q)里的q为什么传的是地址,个人理解这里的q是个引用传递,在函数里执行后修改了q的值要返回到readpoly里,如果是Polynomial q,只是在函数作用域里面新建了一个局部变量,不能修改后再传出去,如果理解有误还请指出)
#include <stdio.h>
#include <stdlib.h>
typedef struct PolyNode *Polynomial;
struct PolyNode{
int coef;
int expon;
struct PolyNode *link;
};
void attach(int c,int e,Polynomial *prear)//Rear一开始指向空结点,prear是指针的指针
{