数据结构多项式实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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,T给出系数的类型,要求能够实现多项式的表示和运算。Polynomial类应该包括私有变量degree,和其他需要的变量。对多项式的表示要求用线性表的形式,例如(c0,c1,c2,…,c d)表示系数表。并设计以下成员函数和操作:

(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 << (ostream& out,const Polynomial& b);

friend istream& operator >> (istream& in, Polynomial& b);

Polynomial();

~Polynomial();

int Degree();

void Merger_of_similar_items();

void delete_first_zero();

Polynomial(const Polynomial& a);

Polynomial& Input();

Polynomial& Output();

Polynomial Add( Polynomial& b);

Polynomial Subtract(Polynomial& b);

Polynomial Multiply(Polynomial& b);

T Value(T &x);

Polynomial operator +(Polynomial& b);

Polynomial operator -(Polynomial& b);

Polynomial operator *(Polynomial& b);

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,应该去掉此项,演示如上

乘法操作演示

求值操作的演示

输入错误,提示重新输入

正常退出

相关文档
最新文档