用两个栈模拟队列的操作

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《数据结构》实验报告

班级:Js001105 姓名:陈婷学号:2011300089

E-mail:1309232000@ 日期:2013.10.22

◎实验题目: 用两个栈模拟队列的操作。

◎实验目的:熟悉并掌握栈和队列的各种操作。

◎实验内容:给定两个栈,用这两个栈模拟进队,出队的操作。

一、需求分析

1、根据菜单的提示输入选项进行入队,出队,以及遍历队的操作,在每个操作项下输入操作的个数及数据。

2、根据菜单选项进行各种操作后输出操作后的队列的元素。

3、程序能够通过两个栈模拟队列实现入队,出队,输出队列元素的功能。

4、测试数据:需要入队5个元素1 2 3 4 5

然后出队3个元素1 2 3

然后输出队列元素

详细的输出结果见运行界面

二概要设计

该程序的主要设计思想是将栈p用作储存数据,以及进队操作,这样刚入队的元素永远在栈p的顶端,先入队的元素在栈p的底端,若要进行出队操作,将栈p的数据倒入栈q,这样先入队的元素就在栈q的顶端,可以通过出栈实现出队的操作。

该程序需要六个部分,分别为初始化、入栈、出栈、倒数据、遍历栈输出元素以及主函数。

三详细设计

首先定义顺序栈的结构:一个数组跟确定栈顶元素的变量top。该程序定义了两个顺序栈分别命名为p跟q。先用p,q分别申请一个节点然后进行初始化,也就是将p,q的top赋值为-1.

再定义一个整型变量cord用于菜单选择,菜单的选择是用switch函数实现的。

当cord为1是进行初始化。需要调用初始化函数initStack,该函数先判断节点申请成功没,若成功就将p的top赋值-1。

当cord为2时进行入队操作,是通过调用出栈函数push实现的。push函数先判断栈满,若栈满就输出入队失败,否则将p的top加1再把数据存入P->Stack[p->top]中。在入队的操作下还需要输入入队元素的个数n,定义一个整型变量i进行for循环,进行入队操作。当cord为3时进行出队操作。通过调用pop函数以及pull函数。Pop函数先判断队空,若队空则输出出队失败,否则取栈顶元素,top减1,返回栈顶元素值。Pull函数先将p栈的栈顶元素出栈,然后再将该元素入q栈,直到p栈空为止。在进行入队操作之前时先将p 的元素倒入q栈中,再根据输入数据的个数进行出栈操作。并输出每次出队的元素。出队结束后再将q栈的元素倒入p栈中。若要出队的元素n大于栈中的元素,在输出最后一个元素后就跳出for循环。

当cord为4时,遍历队列。通过调用display函数实现的。Display函数线判断栈空,不空就就p栈元素倒入q栈。然后输出q栈元素,再将元素倒回平栈。

当cord为5时结束操作。

四使用说明、测试分析及结果

1、根据菜单提示进行操作就可以了。

2、**第一次操作请选择初始化并建立队列!**

++++++++++++++++主菜单+++++++++++++++

1 初始化

2 入队

3 出队

4 遍历队列

5 结束程序运行

1

++++++++++++++++主菜单+++++++++++++++

1 初始化

2 入队

3 出队

4 遍历队列

5 结束程序运行

2

输入入队元素的个数

5

输入入队元素

1 2 3 4 5

队列元素为:

1 2 3 4 5

++++++++++++++++主菜单+++++++++++++++

1 初始化

2 入队

3 出队

4 遍历队列

5 结束程序运行

3

输入要出队元素的个数

3

出队的元素为

1 2 3

队列元素为:

4 5

++++++++++++++++主菜单+++++++++++++++

1 初始化

2 入队

3 出队

4 遍历队列

5 结束程序运行

4

队列元素为:

4 5

++++++++++++++++主菜单+++++++++++++++

1 初始化

2 入队

3 出队

4 遍历队列

5 结束程序运行

5

Press any key to continue

测试结果符合预期的期望。

3、调试过程中遇到挺多的问题,最开始出来40多个错误的时候我都懵了。自己改了一些错误,比如说将typedef写成Typedef等。还有就是栈不空但出队的元素个数大于栈的元素个数的时候的处理方法。最后通过多次调试还是将程序改成预期的那牙膏了。

4、

五、实验总结

这次的实验大概的思路很清晰,但有些细节处理起来很费脑筋。在老师跟同学的帮助下成功的解决了这些问题,我感到很高兴。还有在调试的时候同学跟老师的帮助很重要,因为有些错误自己很难看出来,别人却一眼都看出来了。总体来说这次实验比上一次要顺利得多。

教师评语:

实验成绩:

指导教师签名:

批阅日期:

相关文档
最新文档