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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

栈和队列实验报告.docx

1、栈和队列实验报告数据结构实验报告 顺序栈的实现和基本操作一、需求分析(1)顺序栈 栈的典型操作是入栈和出栈,前者将新元素压入栈中,后者弹出栈顶元素。栈只提供对栈顶元素的访问操作,由top ( )完成。Push ( )和Pop ( )还有Top ( )共同构成了栈的最小功能接口。此外,为了方便使用,栈还有判空,判满和输出栈等功能。 输入形式及范围:输入形式为整型,范围为065535。 输出形式:在顺序栈的初始化后显示初始化成功,在判断栈是否为空时显示当前栈为空,入栈后显示入栈成功或者栈已满。出栈时显示出栈元素或者栈为空。输出栈时依次显示栈中元素。 程序功能:初始化栈,判断栈是否为空,判断栈是否为

2、满,入栈,出栈,取栈顶元素,出栈同时返回栈顶元素和输出栈等功能。 测试数据:初始化后输入栈的长度为4。 判断栈是否为空。 进行5次入栈操作。分别输入1 2 3 4 5 输出栈。执行2次出栈操作。 输出栈。查看栈顶元素。 输出栈。(2)队列 队列的典型操作是入队和出队,前者将新元素压入队列中,后者弹出队首头元素。队列只提供对队头元素和队尾元素的操作,由DeQueue ( ) 和EnQueue( )完成。DeQueue还有EnQueue ( )共同构成了队列的最小功能接口。此外,为了方便使用,队列还有判空,判满和输出队列等功能。 输入形式及范围:输入形式为整型,范围为065535。 输出形式:在顺

3、序队列的初始化后显示初始化成功,在判断队列是否为空时显示当前队列为空,入队列后显示入队成功或者队列已满。出队列时显示出队首元素或者队列为空。输出队列时依次显示队列中元素。 程序功能:初始化队列,判断队列是否为空,判断队列是否为满,入队,出队,取队首元素,输出队列等功能。 测试数据:初始化后输入队列的长度为54。 判断队列是否为空。 进行5次入队操作。分别输入1 2 3 4 5 输出队列。执行2次出队操作。 输出队列。查看队首元素。 输出队列。二、概要设计(1)顺序栈为了实现程序的功能,在.H文件中定义了栈的模板类.template class Stack私有数据成员:private: 栈的最大

4、长度 int MaxSize; 栈顶位置 int top; 顺序栈首地址 T *theArray;公有成员:public: 栈的初始化 void InitStack(int capacity=10);操作结果:初始化一个默认长度为10的空栈 判断栈是否为空 bool IsEmpty() const; 初始条件:栈已存在。操作结果:判断栈是否为空。为空则返回1。判断栈是否为满 bool IsFull() const; 初始条件:栈已存在。 操作结果:判断栈是否为满。为满则返回1。查看栈顶元素 const T &Top() const; 初始条件:栈已经存在。 操作结果:查看栈顶元素,且返回其值。

5、清空栈 void MakeEmpty() top=-1; 初始条件:栈已存在。 操作结果:清空当前栈中元素。出栈 void Pop(); 初始条件:栈已存在。 操作结果:将当前栈顶元素出栈。栈为空时提醒当前栈为空。入栈 void Push(const T &e); 初始条件:栈已存在。 操作结果:将当前元素入栈。栈为满时弹出提醒当前栈已满。出栈且返回栈顶元素T TopAndPop(); 初始条件:栈已存在。 操作结果:当前栈顶元素出栈且返回其值。输出栈 void Output();初始条件:栈已存在操作结果:按顺序输出栈中元素; 模板类中包含了以下函数初始化栈 void InitStack(i

6、nt capacity=10);判断栈空 bool IsEmpty() const;判断栈满 bool IsFull() const;查看栈顶元素 const T &Top() const;置空栈 void MakeEmpty() top=-1;出栈 void Pop();入栈 void Push(const T &e);出栈且返回栈顶元素 T TopAndPop();输出栈 void Output();(2)队列为了实现程序的功能,在.H文件中定义了队列的模板类.template class Queue私有数据成员:private: 队列的最大长度 int MaxSize; 队列的当前位置

7、Int currentSize; 队头位置 int front; 队尾位置 int rear; 队列的头指针 T *theArray; 自加函数 void Increment(int &x);公有成员:public: 队列的初始化 void InitQueue(int capacity=10);操作结果:初始化一个默认长度为10的空队列 判断队列是否为空 bool IsEmpty() const; 初始条件:队列已存在。操作结果:判断队列是否为空。为空则返回1。判断队列是否为满 bool IsFull() const; 初始条件:队列已存在。 操作结果:判断队列是否为满。为满则返回1。查看队列

8、顶元素 const T & GetFront() const; 初始条件:队列已经存在。 操作结果:查看队列顶元素,且返回其值。清空队列 void MakeEmpty();初始条件:队列已存在。 操作结果:清空当前队列中元素。出队列 T DeQueue(); 初始条件:队列已存在。 操作结果:将当前队列顶元素出队。队列为空时提醒当前队列为空。入队列 void EnQueue(const T &x); 初始条件:队列已存在。 操作结果:将当前元素入队。队列为满时弹出提醒当前队列已满。输出队列 void OutPut();初始条件:队列已存在操作结果:按顺序输出队列中元素; 模板类中包含了以下函数

9、初始化队列 void InitQueue(int capacity=10);判断队列是否为空 bool IsEmpty() const;判断队列是否为满 bool IsFull() const;查看队头元素 const T & GetFront() const;置空队列 void MakeEmpty();出对 T DeQueue();入对 void EnQueue(const T &x);输出队列 void Output(); 运用main函数 来调用实现以上功能 各个函数之间关系表示如下:三、详细设计(1)顺序栈 栈的初始化:template void Stack:InitStack(int

10、 capacity) MaxSize=capacity; theArray=new TMaxSize; top=-1; 判断栈空template bool Stack:IsEmpty() const /判断栈是否为空 如果空 返回1 return top=-1;判断栈满template bool Stack:IsFull() const /判断栈是否为满 如果已满 返回1 return top=MaxSize-1;入栈函数template void Stack:Push(const T &e) /入栈 if(IsFull() cout栈已满,不能继续插入endl; theArray+top=e

11、; 出栈函数:template void Stack:Pop() /出栈 if(IsEmpty() cout栈为空endl; top-;出栈且返回栈顶元素:template T Stack:TopAndPop() /返回栈顶元素且出栈 if(IsEmpty() cout栈为空endl; return theArraytop-;查看栈顶元素:template const T & Stack:Top() const /返回栈顶元素 if(IsEmpty() cout栈为空endl; return theArraytop;输出栈:template void Stack:Output() if(IsE

12、mpty() cout栈为空endl; int i; for(i=0;i=top;i+) couttheArrayit; 顺序main函数#include#includemalloc.h#includestdlib.h#includestack.hvoid main() Stack stack; int select; do cout请选择所需操作: endl; couttt1:新建栈endl; couttt2:判断栈是否为空endl; couttt3:判断栈是否为满endl; couttt4:入栈endl; couttt5:出栈endl; couttt6:查看栈顶元素endl; couttt

13、7:输出栈endl; couttt8:退出程序select; switch(select) case 1: int n; cout请输入栈长度(默认为10)n; stack.InitStack(n); system(pause);system(cls); break; case 2: if(stack.IsEmpty()=1) cout当前栈为空endl; else cout当前栈非空endl; system(pause);system(cls); break; case 3: if(stack.IsFull()=1) cout当前栈为满endl; else cout当前栈非满endl; sy

14、stem(pause);system(cls); break; case 4: int x; cout请输入即将入栈的元素值x; stack.Push(x); cout入栈成功endl; system(pause);system(cls); break; case 5: int i,e; e=stack.TopAndPop(); cout是否查看刚刚出栈的元素?(是,则输入1,否则输入0)i; if(i=1) cout刚刚出栈元素值为:eendl; if(i!=1&i!=0) cout输入有误endl; system(pause);system(cls); break; case 6: cou

15、t当前栈顶元素值为:stack.Top()endl; system(pause);system(cls); break; case 7: cout当前栈中元素为:=1&select8);(2)队列队列初始化templatevoid Queue:InitQueue(int capacity) MaxSize=capacity; theArray=new TMaxSize; front=0; rear=-1;判空templatebool Queue:IsEmpty()const return currentSize=0;判满templatebool Queue:IsFull() const ret

16、urn currentSize=MaxSize;templatevoid Queue:MakeEmpty() currenSize=0; front=0; rear=-1;置空队列templatevoid Queue:MakeEmpty() currenSize=0; front=0; rear=-1;查看队头元素templateconst T & Queue:GetFront()const if(IsEmpty() cout队列为空endl; return theArrayfront;出队函数templateT Queue:DeQueue() if(IsEmpty() cout队列为空end

17、l; currentSize-; T frontItem=theArrayfront; Increment(front); return frontItem;入队函数templatevoid Queue:EnQueue(const T&x) if(IsFull() cout队列已满endl; Increment(rear); theArrayrear=x; currentSize+;输出队列templatevoid Queue:OutPut() if(IsEmpty() cout队列为空endl; int i; for(i=front;i=rear;i+) couttheArrayit; 队列

18、main函数#include#includemalloc.h#includestdlib.h#includeduilie.hvoid main() Queue queue; int select; do cout请选择所需操作: endl; couttt1:新建队列endl; couttt2:判断队列是否为空endl; couttt3:判断队列是否为满endl; couttt4:入队endl; couttt5:出队endl; couttt6:查看队首元素endl; couttt7:输出队列endl; couttt8:退出程序select; switch(select) case 1: int

19、n; cout请输入队列长度(默认为10)n; queue.InitQueue(n); system(pause);system(cls); break; case 2: if(queue.IsEmpty()=1) cout当前栈为空endl; else cout当前栈非空endl; system(pause);system(cls); break; case 3: if(queue.IsFull()=1) cout当前队列为满endl; else cout当前队列非满endl; system(pause);system(cls); break; case 4: int x; cout请输入即

20、将入队的元素值x; queue.EnQueue(x); cout入队成功endl; system(pause);system(cls); break; case 5: int i,e; e=queue.DeQueue(); cout是否查看刚刚出栈的元素?(是,则输入1,否则输入0)i; if(i=1) cout刚刚出队元素值为:eendl; if(i!=1&i!=0) cout输入有误endl; system(pause);system(cls); break; case 6: cout当前队首元素值为:queue.GetFront()endl; system(pause);system(c

21、ls); break; case 7: cout当前队列中元素为:=1&select8);四、使用说明顺序栈模板类的全部实现内容包含在一个独立的C+头文件stack.h中。而为了实现该头文件里的函数以及其功能,又建立了一个main函数来使用该顺序栈的类头文件。首先,先进行了模板类的实例化。队列模板类的全部实现内容包含在一个独立的C+头文件stack.h中。而为了实现该头文件里的函数以及其功能,又建立了一个main函数来使用该顺序栈的类头文件。首先,先进行了模板类的实例化。五、测试程序的运行结果(1)顺序栈1、选择1 创建栈 输入4,即创建长度为4的顺序栈2、选择4 入栈。依次操作且输入1.2.

22、3.4.53、选择7 输出栈4、两次选择5 出栈5、选择7 输出栈6、选择6 查看 栈顶元素7、选择7 输出栈(2)队列1、选择1 创建队列,输入5 即创建长度为5的队列2、选择2 判断队列是否为空3、选择4 入队。依次操作且输入 1.2.3.4.54、选择7 输出队列5、选择5 出队6、选择6 查看队首元素7、选择7 输出队列六、心得体会 学习完队列和栈一章后对其操作以及各个函数的运用有的了解。本次的程序在调试的方面曾经多次出现问题,特别是开始时输入的数据出现了不能继续操作的情况,在同学的帮助下解决了这一问题,总体来看由于教材上有较多的实例,个人主要是完成主函数和各个函数的衔接,总体来说操作不是很复杂,但是需要时间进行调试。通过这次试验进一步增强了对栈和队列原理的理解。

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

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