功能选择函数输入数据函数 主程序 升幂函数 赋值函数 求差求和函数 输出结果函数
2、 系统功能模块
(1) 功能选择函数:通过输入对应功能的数字,进行多项
式的运算。该函数在主函数中调用。
- 4 -
(2) 输入数据函数:通过建立单链表,输入两个多项式的
各项指数和系数。
(3) 升幂函数:通过冒泡排序法对两个多项式进行升幂排
序。
(4) 求和求差函数:定义空链用来存储结果,将两个多项
式相加减。
(5) 输出函数:输出上一步的运行结果。
三、 详细设计
一元多项式的表示在计算机内可以用链表来表示,为了节省存储
空间,只存储多项式中系数非零的项。链表中的每一个结点存放多项式的一个系数非零项,它包含三个域,分别存放该项的系数、指数以及指向下一个多项式项结点的指针。创建一元多项式链表,对一元多项式的运算中会出现的各种可能情况进行分析,实现一元多项式的相加、相减操作。
多项式相加的运算规则是:两个多项式中所有指数相同的项的对应系数相加,若和部位零,则构成“和多项式”中的一项;所有指数不相同的的项均“复抄”到“和多项式”中。以单链表作为存储结构,并且“和多项式”中的节点无需另外生成,则可看做是将多项式Q加到多项式P中,由此得到下列运算规则:
若p->exp
- 5 -
若p->exp
若p->exp=q->exp,则将两个结点的系数相加,当和不为零是修改结点p的系数,释放q结点;若和为零,则“和多项式”中无 o此项,从P中p结点,同时释放p和q结点。
多项式相减运算规则同加法。
设计思路:
实现的方法是先定义多项式结点的结构,该多项式每个结点由三个元素:输入的系数、输入的指数、以及指向下一个结点的指针构成。该链表采用链式存储结构。然后通过多次的输入,依次得到两个一元多项式的各个项的系数与指数。该输入以零结尾。然后通过对结点的判断是否为零后,进行运算或者终止的操作。再初始化一个链表LC,将LC的各项系数和指数的指针指向LA+LB所得的结果的值,完成了最后的输出。
(1)定义结构体struct
结构体为表示一个对象的不同属性提供了连贯一致的方法,结构体类型的说明从关键词struct开始,成员可以由各种数据类型混合构成,成员甚至还可以是数组或者其他类型的结构,但是,结构体中不能包含自身定义类型的成员。使用typedef和struct定义的新类型名称,其用途与内建类型的名称相同,可以用来:声明和初始化结构体变量;创建并根据自己的意愿初始化结构数组; (2) 单链表的建立
- 6 -
单链表有两个域,data域和next域,一个是存放数据,一个是存放指针而且指向它的后继。并且还有个head,称表结点,它一般不存放数据,只是做个特殊标记。表的结束是NULL,也就是最后的那个链域next为空单链表的插入运算有两种,一种是头插法,另一种是尾插法,这里运用的是尾插法 (3)一元多项式的建立
输入多项式采用插头的方式,输入多项式中一个项的系数和指数,就产生一个新的节点,建立起它的右指针,并用头节点指向它;为了判断一个多项式是否结束,定义一个结束标志,并输入非0时就继续,当输入0时,就结束一个多项式的输入 (4)显示一元多项式
如果系数是大于0的话就输出+系数x指数形式;如果系数小于0的话输出系数x指数形式;如果指数为0的话,直接输出系数;如果系数是的话就直接输出+x;如果系数是-1的话直接输出-x输出多项式 (5)一元多项式的加法计算
它从两个多项式的头部开始,两个多项式的某一项都不为空时,如果数相等的话,系数就应该相加;相加的和不为0的话,用头插法建立一个新的节点。p的指数小于q的指数的话,就应该复制q节点到多项式中。p的指数大于q的指数的话,就应该复制p节点到多形式中。当第二个多项式为空时,第一个多项式不为空时,将第一个多项式用心节点产生。当第一个多项式为空,第二个多项式不为空时,将第二个多项式用新节点产生
- 7 -