代码思路等待更新中。。。。
实验项目:线性表的链式存储结构与应用
实验题目:一元多项式计算器
实验内容:
设计线性表的动态或者静态链式存储结构,并实现一个一元多项式的计算器。
实验要求:
以动态或者静态链表存储一元多项式,在此基础上按要求完成对一元多项式
的运算。(为保证多项式的值的准确性,多项式的系数可以用分数表示,涉及到
两个分数相除时,结果也可以用分数表示。)
- 能够输入多项式(可以按各项的任意输入顺序,建立按指数降幂排列的多项
式)和输出多项式(按指数降幂排列),以文件形式输入和输出,并显示。 - 能够给出计算两个多项式加法、减法、乘法和除法运算的结果多项式,除法
运算的结果包括商多项式和余数多项式。 - 能够计算一元多项式的 k 阶导函数。
- 能够计算多项式在某一点 x=x 0 的值,其中 x 0 是一个浮点型常量,返回结果为
浮点数。 - 要求尽量减少乘法和除法运算中间结果的空间占用和结点频繁的分配与回收
操作。(提示:利用循环链表结构或者可用空间表的思想,把循环链表表示
的多项式返还给系统或者可用空间表,从而解决上述问题)。
逻辑设计
(1)函数read1():从文件“shuru1.txt”读入第一个一元多项式,依次读取第一个多项式的项数和各个项的系数和指数。
(2)函数read2():和函数read1()类似,读入第二个多项式
(3)函数polyll(float c, int e, Polynomial pRear):建立一个新的节点,该节点的系数为c,指数为e,并插入到节点pRear的后面,函数返回的是插入后的节点。
(4)函数OutPrint(Polynomial P):将多项式P打印出来
(5)Polynomial sort(Polynomial a):将多项式a进行降幂排序,返回指向降幂排序后的第一个节点。
**(6)void shuchu1(Polynomial P)😗*将多项式P按降幂排序输出到文件“shuchu1.txt”中。
(7)void shuchu2(Polynomial P):将多项式P按降幂排序输出到文件“shuchu2.txt”中。
(8)Polynomial polyadd(Polynomial a, Polynomial b):将多项式a和多项式b相加,返回相加后的指向多项式节点的第一个指针。思路:依次比较多项式a和多项式b的节点的指数,如果指数相同,则把系数相加,若系数结果不为0,则调用函数polyll(),把改节点插入到新的多项式中。如果a的指数大,则把a的节点直接插入至新的多项式中。并依次循环比较至有一个多项式为空为止。再把另一个多项式剩下的节点依次插入至新的多项式中。
(9)Polynomial polysub(Polynomial a, Polynomial b):将多项式a和多项式b相减,返回相减后的指向多项式节点的第一个指针。思路和加法类似。知识系数相加变为系数相减。
(10)Polynomial PolyMult(Polynomial a, Polynomial b):将两个多项式相乘,返回指向乘积多项式的第一个节点的指针。思路:新建一个节点,设置两重循环,分别是第一个多项式的节点和第二个节点不为空时进行循环,把多项式a和多项式b所有的项的指数想加,系数相乘,再调用polyll函数建立新的节点。(该乘积后的多项式不是降序的,后面会使用sort()函数重新降幂排序)
(11)float qiuzhi(Polynomial a,float x):进行多项式求值,输入的值为x,将x的值带入多项式a中,返回带入多项式求出的值。
(12)Polynomial PolyDer(Polynomial a, int n):对多项式a求n阶导数
(13)Polynomial PolyDiv(Polynomial a,Polynomial b):多项式的除法,分别打印多项式a除以多项式b的商和余式。多项式除法基本原理:首先创建一个节点用来存储多项式的商,首先比较多项式a和多项式b的最高指数的大小关系,如果a的指数小,则商就是0,余式就是多项式a,否则用多项式a的最高项除以多项式b的最高项得到一个项,把该项插到商的多项式的节点的后面,然后调用polysub()用多项式a减去得到的项乘以多项式b(调用了PolyMult),该减法得到的多项式再当做多项式a和多项式b进行比较,重复上述循环即可。
(14)main():首先使用函数read1()和read2()读入多项式,用P1和P2指向第一个节点。再使用sort()函数进行降幂排序,然后使用函数shuchu1()和shuchu2()输出降幂排序结构到文件中。然后用一个switch语句来进行一元多项式的选择不同的操作。具体的见程序图。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200923195307222.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTQwNjE1NQ==,size_16,color_FFFFFF,t_70#pic_center
结构体设计
typedef struct PolyNode* Polynomial;//给结构体重新命名
struct PolyNode
{//建立链表结构体
float coef;// 系数
int expon; //指数
Polynomial link;//指向下一个节点的指针
};