ImageVerifierCode 换一换
格式:DOCX , 页数:14 ,大小:24.09KB ,
资源ID:3864437      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/3864437.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(南邮数据结构实验一.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

南邮数据结构实验一.docx

1、南邮数据结构实验一实 验 报 告(2014 / 2015 学年 第 二 学期)课程名称数据结构实验名称线性表的基本运算及多项式的算术运算实验时间2015年9月28日指导单位计算机科学与技术系指导教师黄海平学生姓名陈明阳班级学号Q学院(系)贝尔英才专 业信息科技强化班实 验 报 告实验名称线性表的基本运算及多项式的算术运算指导教师黄海平实验类型验证实验学时4实验时间9.28一、实验目的和要求内容:实现顺序表和单链表的基本运算,多项式的加法和乘法算术运算。要求:能够正确演示线性表的查找、插入、删除运算。实现多项式的加法和乘法运算操作。二、实验环境(实验设备)VSUAL STUDIO2015三、实验

2、原理及内容LinearlistseqlistLA,LB函数调用数据类型如下图源码:Linearlist.h:#includeusing namespace std;template class LinearListpublic: virtual bool IsEmpty() const = 0; virtual int Length() const = 0; virtual bool Find(int i, T&x) const = 0; virtual int Search(T x) const = 0; virtual bool Insert(int i, T x) = 0; virtua

3、l bool Delete(int i) = 0; virtual bool Update(int i, T x) = 0; virtual void Output(ostream& out) const = 0;protected: int n;Seqlist.h:#includelinearlist.htemplateclass SeqList :public LinearListpublic: SeqList(int mSize); SeqList() delete elements; bool IsEmpty() const; int Length() const; bool Find

4、(int i, T& x) const; int Search(T x) const; bool Insert(int i, T x); bool Delete(int i); bool Update(int i, T x); void Output(ostream& out)const;private: int maxLength; T *elements;templateSeqList:SeqList(int mSize) maxLength = mSize; elements = new TmaxLength; n = 0;templatebool SeqList:IsEmpty() c

5、onst return n = 0;templateint SeqList:Length()const return n;templatebool SeqList:Find(int i, T& x)const if (in - 1) cout out of bounds endl; return false; x = elementsi; return true;templateint SeqList:Search(T x)const for (int j = 0; j n; j+) if (elementsj = x)return j; return -1;templatebool SeqL

6、ist:Insert(int i, T x) if (in - 1) cout out of bounds endl; return false; if (n = maxLength) cout over flow i; j-)elementsj + 1 = elementsj; elementsi + 1 = x; n+; return true;templatebool SeqList:Delete(int i) if (in - 1) cout out of bounds endl; return false; if (!n) cout over flow endl; return fa

7、lse; for (int j = i+1; j n; j-)elementsj -1 = elementsj; n-; return true;templatebool SeqList:Update(int i, T x) if (in - 1) cout out of bounds endl; return false; elementsi = x; return true;templatevoid SeqList:Output(ostream& out)const for (int i = 0; i n; i+)out elementsi ; out endl;源.cpp:#includ

8、eseqlist.hconst int SIZE = 20;void main() SeqList LA(SIZE); int i = 0; for (i = 0; i5; i+) LA.Insert(i - 1, i); LA.Insert(-1, 10); LA.Output(cout);实现在线性表LA中插入0-4然后在一开始插入10运行截图如下:多项式实验:定义类如下重构函数如下:源码:#includeusing namespace std;class Termpublic: Term(int c, int e); Term(int c, int e, Term* nxt); Term

9、* InsertAfter(int c, int e);private: int coef; int exp; Term* link; friend ostream& operator(ostream &, const Term &); friend class Polynominal;Term:Term(int c, int e) :coef(c), exp(e) link = 0;Term:Term(int c, int e, Term *nxt) : coef(c), exp(e) link = nxt;Term* Term:InsertAfter(int c, int e) link

10、= new Term(c, e, link); return link;ostream& operator(ostream& out, const Term& val) if (0 = val.coef) return out; if (1!= val.coef) out val.coef; switch (val.exp) case 0:break; case 1:out X; break; default:out X val.exp; break; return out;class Polynominalpublic: Polynominal(); Polynominal(); void

11、AddTerms(istream& in); void Output(ostream& out)const; void PolyAdd(Polynominal& r); void PolyMul(Polynominal& r);private: Term* theList; friend ostream& operator(istream&, Polynominal &); friend Polynominal& operator+(Polynominal &, Polynominal &); friend Polynominal& operator*(Polynominal &, Polyn

12、ominal &);Polynominal:Polynominal() theList = new Term(0, -1); /头结点 theList-link = NULL; /单链表尾结点指针域为空Polynominal:Polynominal() Term* p = theList-link; while (p != NULL) theList-link = p-link; delete p; p = theList-link; delete theList;void Polynominal:AddTerms(istream & in) Term* q = theList; int c,

13、 e; for (;) cout Input a term(coef,exp):n c e; q = q-InsertAfter(c, e); if (0 = e) break; void Polynominal:Output(ostream& out)const int first = 1; Term *p = theList-link; for (; p != NULL & p-exp = 0; p = p-link) if (!first & (p-coef0) out +; first = 0; out *p; cout link; /p指向第一个要处理的结点 q = q1-link;

14、 /q1是q的前驱,p和q就指向两个当前进行比较的项 while (p != NULL & p-exp = 0)/对r的单循环链表遍历,知道全部结点都处理完 while (p-exp exp) /跳过q-exp大的项 q1 = q; q = q-link; if (p-exp = q-exp) /当指数相等时,系数相加 q-coef = q-coef + p-coef; if (q-coef = 0) /若相加后系数为0,则删除q q1-link = q-link; delete(q); q = q1-link; /重置q指针 else q1 = q; /若相加后系数不为0,则移动q1和q q

15、 = q-link; else /pexpq-exp的情况 q1 = q1-InsertAfter(p-coef, p-exp); /以p的系数和指数生成新结点,插入q1后 p = p-link; void Polynominal:PolyMul(Polynominal& r) Polynominal result; /定义相乘后的数据 Term *n = result.theList; /n指向result的头结点 n = n-InsertAfter(0, 0); /在result的头结点后插入新结点,系数指数均为0 Term *p = r.theList-link; /p指向第一个要处理的

16、结点 while(p-exp = 0) /对r的单循环链表遍历 Polynominal tmp; /存储某段相乘后的数据 Term *m = tmp.theList; /m指向tmp的头结点 Term *q = theList-link; /q指向表头结点的后继结点 while(q-exp = 0) /对当前对象的单循环环链表遍历 m = m-InsertAfter(p-coef)*(q-coef), (p-exp) + (q-exp); /生成新结点插入n后 q = q-link; result.PolyAdd(tmp); /将temp加到result上 p = p-link; Term *

17、q = theList-link; /q指向表头结点的后继结点 while(q != NULL) /删除原对象的所有数据 theList-link = q-link; delete q; q = theList-link; q = theList; q = q-InsertAfter(0, 0); PolyAdd(result); /将result加到当前对象上ostream &operator(istream& in, Polynominal &x) x.AddTerms(in); return in;Polynominal & operator + (Polynominal &a, Pol

18、ynominal &b) a.PolyAdd(b); return a;Polynominal & operator * (Polynominal &a, Polynominal &b) a.PolyMul(b); return a;int main() int choose; cout choose calculate type 1.add 2.mul choose; Polynominal p, q; switch (choose) case 1: cin p; cout q; cout p; cout q; cout q; q = q * p; break; cout q; return 0;实现多项式相加或相乘运行截图:实 验 报 告四、实验小结(包括问题和解决方法、心得体会、意见与建议等) 这两个实验的重难点都在于正确灵活使用,大部分代码在书上都有提供,真正的操作重点在于理解这些代码的意义和使用方法。第二个实验用到了运算符的重载,对于编程能力有不少挑战。目前第二个代码仍然有几个问题,比如不能加法乘法混用,计算后第一个多项式的内容会被覆盖等,下一步改进方向是实现加法乘法混用,并且将结果传递给第三变量,增加代码实用性。五、指导教师评语成 绩批阅人日 期

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1