多项式加减法

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

即将链表2中的结点插入到链表1中适当的地方,或者若与链表1中结点指 数相等则运算后删除该节点
链表1表示结果多项式 链表2为空 结果多项式为
6
0
2
3
-2
5 ^
6 2 x3 2 x5
多项式的表示2:链表
方式二:利用原结点空间,结果用一个新链表存放
6 5 x 5 3 x8
链表1表示多项式1
实验目的
编写程序,实现多项式的加法和减法运算
数据结构及算法
队列表示:相应多项式加法算法(减法类似) 链表表示:相应多项式加法算法(减法类似)
具体实现时需要注意的问题
输入 输出 空间分配和释放(new 和delete)
多项式的表示1:队列
用一个队列表示一个多பைடு நூலகம்式
队列中的每个成员是多项式的一项
//class Polynomial------------------------------------// class Polynomial:private queue<Node> { public: void read(); void print()const; //多项式p+q void equals_sum(Polynomial p,Polynomial q); //多项式p-q void equals_difference(Polynomial p,Polynomial q); }; #endif
表示为
6-5x^5+3x^8
不用输入,直接程序内赋值,构造多项式
编写程序测试的时候使用,用于测试多项式算法是否成 功
具体实现:多项式结果输出
将多项式一项项输出
比如,输出多项式中第n项的指数,系数
多项式整体输出
6-5x^5+3x^8 考虑每一项的符号问题
加号还是减号?通过判断系数与0的大小,决定是否要加上 “+” 第一项是否有符号(加号可以省略,减号不可以省略)
6
0
-5
5
3
8 ^
2 x 3 3 x 5 3 x8
链表2表示多项式2
2
3
3
5
-3
8 ^
从链表1和链表2的头部开始进行指数比较。指数相等则系数相加,把结 果结点链接到链表3的尾部,删除多余结点;该结点指数唯一,则直接将 该节点链接到链表3的尾部
链表3表示结果多项式 链表1为空,链表2为空 结果多项式为
多项式
6 5 x 5 3 x8
6 0 -5 5 3 8
链表表示
多项式的表示2:链表
方式一:基于某个链表
6 5 x 5 3 x8
链表1表示多项式1
6
0
-5
5
3
8 ^
2 x 3 3 x 5 3 x8
链表2表示多项式2
2
3
3
5
-3
8 ^
在链表1的基础上对其进行结点的插入和删除,得到结果多项式。
#ifndef POLYNOMIAL_H_ #define POLYNOMIAL_H_ #include <iostream> #include <queue> using namespace std; struct Node { float coef;//系数 int exp;//指数 };
Polynomial.h
链表3表示结果多项式 链表1不变,链表2不变 结果多项式为
6
0
2
3
-2
5 ^
6 2 x3 2 x5
具体实现:多项式输入
按多项式一项一项输入,比如提示输入多项式中 某一项的系数,输入多项式某一项的指数
项数预先定好 约定某特殊符号作为输入结束符
直接将整个多项式一次输入
6 5 x 5 3 x8
6
0
-5
5
3
8
结果多项式
6
0
2
3
-5
5
6 2 x3 5 x5
多项式的表示1:队列
算法实现
可以使用第一个实验中自己实现的队列类 可以使用STL中的队列
具体用法可以参看msdn
多项式的表示2:链表
用一个链表表示一个多项式
链表中的每个结点是多项式的一项
struct Node { float coef;//系数 int exp;//指数 Node *next; };
考虑指数为0的情况
x0不用输出(x^0)
具体实现
主要目的是实现多项式的加法和减法,那 么可以先把目光集中在具体的算法上,而 输入输出可以简化先,等把多项式的加法 减法实现,再进一步完善输入输出
省略输入:直接在程序内部赋值 省略输出:直接用单步调试的方式,观察
具体实现方法一:用STL中的队列
具体实现方法二:用自己实现的队列类
#ifndef POLYNOMIAL_H_ #define POLYNOMIAL_H_ #include <iostream> using namespace std; #include "Extended_queue.h" //class Polynomial------------------------------------// class Polynomial:private Extended_queue { public: void read(); void print()const; void equals_sum(Polynomial p,Polynomial q); void equals_difference(Polynomial p,Polynomial q); }; #endif
struct Node { float coef;//系数 int exp;//指数 };
约定:队列从头到尾,按照多项式指数增加(或减少) 排列
多项式
6 5 x 5 3 x8
用队列表示的上述多项式
队列头
多项式的表示1:队列
多项式1
2 x 3 3 x8
2
3
-3
8
多项式2
6 5 x 5 3 x8
6
0
2
3
-2
5 ^
6 2 x3 2 x5
多项式的表示2:链表
方式三:新开辟结点空间,结果用一个新链表存放
6 5 x 5 3 x8
链表1表示多项式1
6
0
-5
5
3
8 ^
2 x 3 3 x 5 3 x8
链表2表示多项式2
2
3
3
5
-3
8 ^
从链表1和链表2的头部开始进行指数比较。指数相等则系数相加,新开 辟空间存放该项结果,把新生成的结果结点链接到链表3的尾部;若结点 指数唯一,也新开辟空间存放该结点的值,并将此结点链接到链表3中
相关文档
最新文档