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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

类模板.docx

1、类模板信息13级数据结构实验1窗体顶端窗体底端一、程序设计题(10分)1. 双向链表排序问题 4分 题目描述随机输入一些数据,然后排序后输出。建议使用双向链表结点和双向链表类来实现。参考第4讲ppt里的第3个例题。可以不使用下面的参考代码,自行编写。关于双向链表和双向结点的参考代码如下:/ 自定义类型enum StatusCode SUCCESS, FAIL, UNDER_FLOW, OVER_FLOW,RANGE_ERROR, DUPLICATE_ERROR, NOT_PRESENT, ENTRY_INSERTED, ENTRY_FOUND, VISITED, UNVISITED;templ

2、ate void Write(const ElemType &e)/ 操作结果: 显示数据元素cout e ;/ 双向链表结点类模板template struct DblNode/ 数据成员: ElemType data; / 数据域 DblNode *back; / 指向前驱的指针域 DblNode *next; / 指向后继的指针域/ 构造函数模板: DblNode(); / 无数据的构造函数模板 DblNode(ElemType item, DblNode *linkBack = NULL, DblNode *linkNext = NULL);/ 已知数据域和指针域建立结构;/ 双向链表

3、结点类模板的实现部分templateDblNode:DblNode()/ 操作结果:构造指针域为空的结点next = NULL;templateDblNode:DblNode(ElemType item, DblNode *linkBack, DblNode *linkNext)/ 操作结果:构造一个数据域为item和指针域为linkBack和linkNext的结点data = item; back = linkBack; next = linkNext;/ 双向链表类模板template class DblLinkListprotected:/ 循环链表实现的数据成员: DblNode *h

4、ead; / 头结点指针 mutable int curPosition; / 当前位置的序号 mutable DblNode * curPtr; / 指向当前位置的指针 int count; / 元素个数/ 辅助函数模板: DblNode *GetElemPtr(int position) const; / 返回指向第position个结点的指针 void Init(); / 初始化线性表public:/ 抽象数据类型方法声明及重载编译系统默认方法声明: DblLinkList(); / 无参数的构造函数模板 virtual DblLinkList(); / 析构函数模板 int Lengt

5、h() const; / 求线性表长度 bool Empty() const; / 判断线性表是否为空 void Clear(); / 将线性表清空 void Traverse(void (*visit)(const ElemType &) const; / 遍历线性表 int GetCurPosition() const; / 返回当前位置 StatusCode GetElem(int position, ElemType &e) const; / 求指定位置的元素 StatusCode SetElem(int position, const ElemType &e); / 设置指定位置的元

6、素值 StatusCode Delete(int position, ElemType &e); / 删除元素 StatusCode Insert(int position, const ElemType &e); / 插入元素 DblLinkList(const DblLinkList & ccopy); / 复制构造函数模板 DblLinkList &operator =(const DblLinkList& ccopy); / 重载赋值运算符 DblNode *GetHeadPtr();templateDblNode *DblLinkList:GetHeadPtr() return he

7、ad;/ 链表类模板的实现部分templateDblNode *DblLinkList:GetElemPtr(int position) const/ 操作结果:返回指向第position个结点的指针 if (curPosition position) / 当前位置在所查找位置之前,向后查找 for (; curPosition next; / 查找位置position else if (curPosition position) / 当前位置在所查找位置之后,向前查找 for (; curPosition position; curPosition-) curPtr = curPtr-bac

8、k; / 查找位置position return curPtr;template void DblLinkList:Init()/ 操作结果:初始化线性表 head = new DblNode; / 构造头指针 head-next = head; / 空循环链表的头结点后继为头结点本身 head-back = head; / 空双向循环链表的头结点前驱为头结点本身 curPtr = head; curPosition = 0;/ 初始化当前位置 count = 0; / 初始化元素个数template DblLinkList:DblLinkList()/ 操作结果:构造一个空链表 Init()

9、;template DblLinkList:DblLinkList()/ 操作结果:销毁线性表 Clear(); / 清空线性表 delete head; / 释放头结点所点空间template int DblLinkList:Length() const/ 操作结果:返回线性表元素个数 return count;template bool DblLinkList:Empty() const/ 操作结果:如线性表为空,则返回true,否则返回false return head-next = head;template void DblLinkList:Clear()/ 操作结果:清空线性表 E

10、lemType tmpElem; / 临时元素值 while (Length() 0) / 表性表非空,则删除第1个元素 Delete(1, tmpElem); template void DblLinkList:Traverse(void (*visit)(const ElemType &) const/ 操作结果:依次对线性表的每个元素调用函数(*visit) for (DblNode *tmpPtr = head-next; tmpPtr != head; tmpPtr = tmpPtr-next) / 用tmpPtr依次指向每个元素 (*visit)(tmpPtr-data); / 对

11、线性表的每个元素调用函数(*visit) template int DblLinkList:GetCurPosition() const/ 操作结果:返回当前位置 return curPosition;template StatusCode DblLinkList:GetElem(int position, ElemType &e) const/ 操作结果:当线性表存在第position个元素时,用e返回其值,返回ENTRY_FOUND,/ 否则返回NOT_PRESENT if (position Length() / position范围错 return NOT_PRESENT; / 元素不

12、存在 else / position合法 DblNode *tmpPtr; tmpPtr = GetElemPtr(position); / 取出指向第position个结点的指针 e = tmpPtr-data; / 用e返回第position个元素的值 return ENTRY_FOUND; template StatusCode DblLinkList:SetElem(int position, const ElemType &e)/ 操作结果:将线性表的第position个位置的元素赋值为e,/ position的取值范围为1positionLength(),/ position合法时

13、返回SUCCESS,否则返回RANGE_ERROR if (position Length() / position范围错 return RANGE_ERROR; else / position合法 DblNode *tmpPtr; tmpPtr = GetElemPtr(position); / 取出指向第position个结点的指针 tmpPtr-data = e; / 设置第position个元素的值 return SUCCESS; template StatusCode DblLinkList:Delete(int position, ElemType &e)/ 操作结果:删除线性表的

14、第position个位置的元素, 并用e返回其值,/ position的取值范围为1positionLength(),/ position合法时返回SUCCESS,否则返回RANGE_ERROR if (position Length() / position范围错 return RANGE_ERROR; else / position合法 DblNode *tmpPtr; tmpPtr = GetElemPtr(position - 1); / 取出指向第position - 1个结点的指针 tmpPtr = tmpPtr-next; / tmpPtr指向第position 个结点 tmpP

15、tr-back-next = tmpPtr-next; / 修改向右的指针 tmpPtr-next-back = tmpPtr-back; / 修改向左的指针 e = tmpPtr-data; / 用e返回被删结点元素值 if (position = Length() / 删除尾结点,当前结点变为头结点 curPosition = 0; / 设置当前位置的序号 curPtr = head; / 设置指向当前位置的指针 else / 删除非尾结点,当前结点变为第position个结点 curPosition = position; / 设置当前位置的序号 curPtr = tmpPtr-next

16、; / 设置指向当前位置的指针 count-; / 删除成功后元素个数减1 delete tmpPtr; / 释放被删结点 return SUCCESS; template StatusCode DblLinkList:Insert(int position, const ElemType &e)/ 操作结果:在线性表的第position个位置前插入元素e/ position的取值范围为1positionLength()+1/ position合法时返回SUCCESS, 否则返回RANGE_ERROR if (position Length() + 1) / position范围错 retur

17、n RANGE_ERROR; / 位置不合法 else / position合法 DblNode *tmpPtr, *nextPtr, *newPtr; tmpPtr = GetElemPtr(position - 1); / 取出指向第position-1个结点的指针 nextPtr = tmpPtr-next; / nextPtr指向第position个结点 newPtr = new DblNode(e, tmpPtr, nextPtr);/ 生成新结点 tmpPtr-next = newPtr; / 修改向右的指针 nextPtr-back = newPtr; / 修改向左的指针 cur

18、Position = position; / 设置当前位置的序号 curPtr = newPtr; / 设置指向当前位置的指针 count+; / 插入成功后元素个数加1 return SUCCESS; template DblLinkList:DblLinkList(const DblLinkList & ccopy)/ 操作结果:由线性表copy构造新线性表复制构造函数模板 int copyLength = ccopy.Length(); / copy的长度 ElemType e; Init(); / 初始化线性表 for (int curPosition = 1; curPosition

19、 = copyLength; curPosition+) / 复制数据元素 ccopy.GetElem(curPosition, e); / 取出第curPosition个元素 Insert(Length() + 1, e); / 将e插入到当前线性表 template DblLinkList &DblLinkList:operator =(const DblLinkList & ccopy)/ 操作结果:将线性表copy赋值给当前线性表重载赋值运算符 if ( & ccopy != this) int copyLength = ccopy.Length(); / copy的长度 ElemTy

20、pe e; Clear(); / 清空当前线性表 for (int curPosition = 1; curPosition = copyLength; curPosition+) / 复制数据元素 ccopy.GetElem(curPosition, e); / 取出第curPosition个元素 Insert(Length() + 1, e); / 将e插入到当前线性表 return *this;template void Sort(DblLinkList &L) /请补充完整int main(void) DblLinkList la,lb; int x; /cout 随机输入一些数据,输

21、入0时结束 x & x != 0) la.Insert(la.Length() + 1, x); lb = la; /cout排序前的数据是:; lb.Traverse(Write); coutendl; Sort(la); /cout排序后的数据是:; la.Traverse(Write); return 0; / 返回值0, 返回操作系统 输入描述随机的数据,以0作为输出结束标记。 输出描述链表创建好后的数据,以及排序后链表中的数据。 样例输入2 10 3 5 0 样例输出2 10 3 52 3 5 10 2. 一元多项式问题 6分 题目描述符号多项式的操作是表处理的典型应用,在数学上一元

22、n次多项式按升幂排列,可进行加、减、乘的运算。请用单链表实现多项式的表示及三种运算操作。思路提示:#includeusing namespace std;enum StatusCode SUCCESS, FAIL, UNDER_FLOW, OVER_FLOW,RANGE_ERROR, DUPLICATE_ERROR, NOT_PRESENT, ENTRY_INSERTED, ENTRY_FOUND, VISITED, UNVISITED;/1 结点类/定义一个Node类,在线性链表类里要用到,见P32/也可查找课件文件夹里的node.h文件,直接拷贝/2 线性链表类/定义一个SimpleLin

23、kList类,实现一些方法,见教材P32/查找文件夹里的simple_lk_list.h/3 多项式项类/定义一个PolyItem类,成员有系数double coef和指数int expn/在多项式类里要用到,见教材P56/4 多项式类/定义一个Polynomial类,就是一个单链表,/只是实现了加减乘运算符的重载,见教材P57/加法在ppt课件的例题里已经讲解了/减法就是将第二项的所有系数取反,再调用加法/乘法具体的讲解见参考教材int main(void) int i,c,n,m; Polynomial fa, fb, fc; /用多项式类实例化3个对象 PolyItem it; /接收每

24、一项数据所使用的临时变量 cinn; for(i=0;i it.coef it.expn; fa.InsItem(it); /把每一项插入到多项式链表里 cinm; for(i=0;i it.coef it.expn; fb.InsItem(it); while( cinc & c) if(c=1) fc=fa+fb; else if(c=2) fc=fa-fb; else fc=fa*fb; fc.Display(); cout endl; return 0; / 返回值0, 返回操作系统 输入描述第一个多项式的项数n,每一项的系数和指数;第二个多项式的项数m,每一项的系数和指数。分别用1、2、3代表加、减、乘三种运算,输入数字即执行具体的某一种运算。输入0表示程序结束。 输出描述输出运算结果,每种运算占一行,且用数字有序对升幂表示。 样例输入31 2 3 4 5 621 2 3 4123210 样例输出2 2 6 4 5 6 5 6 1 4 6 6 14 8 15 10 5 6 2 2 6 4 5 6

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

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