三、详细设计
元多项式定义系数和指数结构如下:
coef exp n n ext
coef 域--存放结点的系数值
expn 域--存放结点的指数值
next 域--存放结点的直接后继的地址(位置)的指针域(链域)
一元多项式单链表存储结构:
typedef struct term
{ float coef; // 系数
int expn; // 指数
struct term *n ext;
}term;
有了链表特定的数据类型 term,接下来就需要建立这个链表。这里我们自定义一个构
造函数 CreatePoly ()来构造链表。首先定义一个 term 型的指针变量 h=p 作为头结点,存 储多项式的
信息(项数),为 h 分配存储空间建立一个头结点并为其数据域赋值,分配存储 空间用 malloc()函数来
实现;这时输入多项式的项数 m,先给 p 的 coef 赋值为 0,此时利用
一个 for 循环将 p 链表的 coef 与 expn 值从键盘输入,用 m 来控制循环的次数,若该从键盘 输入的
coef 值不为 0,则将该数值插入链表新建链表 q,用 malloc()分配给 p 空间,p=p->next
q 即为多项继续从键盘输入 coef 与 expn 的值,直到满足 p->next=null,输入完成,返回链表
式的系数与指数,创建多项式完成。
在处理多项式相加的问题上, 由于事先建立的多项式函数已经按指数大小排好序, 那么
多项式的相加就变得不那么复杂了,我们只要找出两个相加多项式指数相同的项进行合并, 即将指数
相同的项的系数相加, 其它的保持不变存好即可。 而查找指数相同的项, 只要按链
表从头到尾进行扫描,若发现相同,则两个同时往下移,否则只将其中指数较大的往下移。 假若两个
指数相同的项进行合并时,其系数相加值为 0,则消除该项,继续下去。
C ()函数实现,需要定
for
在处理输入的多项式及变量的值计算结果的问题时,定义一个
义一个 float 变量 sum 来存储和值,再引用一个 pow()函数来计算多项式的和,利用一个
循环来一一计算 x 的 q->expn 次方后与 q->coef 相乘的值,并存储在 sum 中,q=q->next,直 到
q->next =unll,跳出 for 循环,返回 sum 的值就是多项式在用
对多个输入的表达式按照指数从大到小排序输出
x 赋值后的值。
:
,利用一个 for (包含两个函数 CreatP
olyn(M,n);selsort(M);)循环,用 scanf()输入 k 来控制 for 的次数可控制输入的多项式个数, 并一个
trem 型数组 G[i]来保存每一个多项式,方便后来的按最高指数大小排序。排序的思 想利用枚举排序法
可将每个多项式最高次 expn 按从大到小排列并保存在 G[i]数组中,再次
利用 for 将排序好的 G[i]多项式按指数从大到小输出。