数据结构多项式实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据结构实验报告--Week05
姓名:覃兆坤学号:10389355
一、实验目的
用线性表实现多项式的相关操作,加强对线性表的理解和练习,熟练对线性表的操作。
二、实验题目
一个d阶多项式有如下形式:c d x d+c d−1x d−1+c d−2x d−2…+c0
其中,c d≠0,指数都是非负数。每一个c i x i是多项式中的一项。
设计一个C++的模板类Polynomial
(a) Polynomial(),创建零阶多项式,即构造函数
(b) Degree(),返回多项式的阶数degree
(c) Input(),输入多项式,指数升序依次输入每一项的指数和系数。例如输入: 0 c0 1 c1 2 c2…d c d。重载>>完成输入。
(d) Output(),输出多项式,和输入的格式相同。重载<<完成输出。
(e) Add(b),和b多项式相加,并返回结果多项式。重载+。
(f) Subtract(b),和b多项式相减返回结果多项式。重载-。
(g) Multiply(b),和b多项式相乘返回结果多项式。重载*。
(h) Value(x),返回x代入多项式的值。重载( ),例如对于多项式对象P, P(x)能够返回代入x的多项式值。
三、实验设计
设计方法:
本次实现采用链表的结构,实现建立多项式,对多项式进行相加相减相乘求值的操作。
一共写了2个文件Polynomial.h和test.cpp文件。其中前者实现多项式的相关功能,后者为人机交互式测试其功能。
1:Polynomial.h:共有2个类:
Node为一个节点其中index; modulus; next 分别为指数,系数和
指向下一个节点的指针。
Polynomial为一个多项式,私有成员有degree为多项式阶数,
head为表头指针。公有函数:
friend ostream& operator <<
friend istream& operator >>
Polynomial();
~Polynomial();
int Degree();
void Merger_of_similar_items();
void delete_first_zero();
Polynomial(const Polynomial& a);
Polynomial
Polynomial
Polynomial
Polynomial
Polynomial
T Value(T &x);
Polynomial
Polynomial
Polynomial
T operator ()(T& b);
其中,void Merger_of_similar_items();void delete_first_zero();分别为对多项式合并同类项的操作和对多项式最高项系数为0 进行处理的函数。其他函数的意义在此不一一解释。
2:test.cpp测试函数
while(1){
cout << "***************Polynomial**************" << endl;
cout << "1:Add 2:Subtract" << endl;
cout << "3:Multiply 4:P(x) " << endl;
cout << "0:exit " << endl;
cout << "***************************************" << endl;
实现对加法,减法,乘法,求值的操作的检验。
设计思想:
加法实现:创建一个新的链表,用于存放相加的结果。用ptr和ptr1分别指向2个链表,指针遍历所有节点,如果2个指针指向的位置指数相同,就创建一个新的节点链在新表的后面,系数为2个相加,如果不相等,则创造2个节点,把各自表中的节点的信息复制到新表中,最后,调用合并同类型操作。因此,本程序能够实现中间少项的操作。
减法实现:与加法类似,相应的位置改为减。
乘法实现:类似冒泡排序的方法,用一个链表的每一个元素分别与另一个链表的每一个元素相乘,结果存放在新的链表之中。最后再调用合并同类项的函数。
输入输出申明为友元函数,必须同时申明2个类的友元函数,不能程序无法运行。在申明之中,还要中意
四、实验结果
加法的操作演示
正常减法操作演示
当相减结果最高位为0,应该去掉此项,演示如上
乘法操作演示
求值操作的演示
输入错误,提示重新输入
正常退出