1、 数据结构课程设计数据结构课程设计 多项式计算多项式计算 班级:班级: 学号:学号: 姓名:姓名: 指导老师:指导老师: 多项式计算多项式计算 1 1、 问题描述问题描述 能够按照指数降序排列建立多项式; 能够完成两个多项式的 相加、相减和相乘,并将结果输出。 2 2、 设计思路设计思路 这个程序的关键是多项式的创建和排列,以及相乘时系数相乘和 指数相加、 相加时相同指数的系数相加、 相减时相同指数的系数相减。 由于多项式拥有指数和系数(假设基数已定) ,所以可以定义一个包 含指数系数的结构体, 用单链表存储多项式的数据,所以结构体包含 next 指针。数据插入时比较两数的指数,按照降序排序,
2、从表头的 next 开始,直至找到合适的位置,然后开始链表中数值的插入,如 果相等则直接将指数相加, 如果大于就将新数据插入到当前指向的前 面,否则将新数据插入到最后。输入完数据后选择计算方式(相乘、 相加、相减) ,多项式运算时要循环遍历整个多项式,多项式的每一 组数据都要和另一个多项式整组数据相运算 (每一个运算值都存储到 新建的“多项式”链表中) ,直到两个多项式都遍历完结束。 3 3、 数据结构设计数据结构设计 在模拟多项式对象时,为了简化处理,只取最核心的两个数据: 多项式的系数和指数。前面提到,要用单链表操作,所以要加上个 next 指针,再由该结构体定义一个结点类型和指针类型。具
3、体数据 结构定义如下: typedef struct node int xs; /*系数*/ int zs; /*指数*/ struct node * next; /*next 指针*/ Dnode,* Dnodelist; 4 4、 功能函数设计功能函数设计 (1)链表初始化函数 Creat_node() 带有头结点的头指针指向空(NULL) 。 (2)多项式数据的创建函数 Creat_Dmeth() 当链表初始化成功后,开始创建多项式。分别循环输入两个多项 式的系数和指数,其中要用到插入函数。 (3)数据的插入函数 Insert_node() 当创建多项式时,要用到此函数,即利用插入的方式
4、将多项式的 数据连接起来。再输入一组数据后,程序自动调用此函数,插入时也 进行着排序,从表头的 next 开始,一一比较指数大小,直到大于或 等于当前指向的数据或遍历完所有数据时停止, 然后开始链表中数值 的插入, 如果相等则直接将指数相加,如果大于就将新数据插入到当 前指向的前面,否则将新数据插入到最后。 (4)多项式的显示函数 Show() 从多项式表头的 next 开始,直到指向空(NULL) ,将系数与指数 一一显示。 (5)选择运算方式的函数 select() 三种选择:1 为相乘,2 为相加,3为相减;每一种选择调用相应 的运算函数。 (6)多项式的运算函数:新建链表存储计算后的多
5、项式 1、多项式相乘 Mulresult() 创建两个指针分别指向两个多项式表头的 next,使用两个 while 函数嵌套循环, 遍历每一组数据,每遍历一次都将两组数据的系数相 乘,指数相加,再利用插入函数将系数与指数存储到新建多项式的链 表中。 2、多项式相加 Addresult() 创建两个指针分别指向两个多项式表头的 next,分别使用两个 while 函数独自循环,遍历各自的每一组数据,每遍历一次都将系数 与指数存储到新建多项式的链表中。 因为存储时利用到插入函数,而 插入函数中有相同指数的系数相加功能, 所以直接将两个多项式的数 据依次插入到新的多项式中即可完成多项式相加。 3、多
6、项式相减 Subresult() 创建两个指针分别指向两个多项式表头的 next,以两个指针同时 不为空为条件循环遍历,如果当前多项式 1 的指数小于多项式 2,则 将当前多项式 2的系数置负,指数不变,存入新建多项式中,指向多 项式 2 的指针指向下一个; 如果如果当前多项式 1的指数大于多项式 2,则将当前多项式 1 的系数指数不变,存入新建多项式中,指向多 项式 1 的指针指向下一个; 否则将多项式 1的系数减去 2的系数后存 入新建多项式中,指数不变存入,再将两个指针同时指向下一个。结 束循环后判断是哪一个多项式遍历完了, 将未遍历完的多项式剩下的 数据全部插入到新建多项式中。 (7)主函数 main() 创建两个多项式的链表并且初始化,分别调用相应的多项式创建 函数,创建成功后选择运算方式,再将运算结果输出显示。 5 5、 程序代码程序代码 #include #include typedef struct node int xs; int zs; struct node *