pta----堆栈模拟队列实验报告
创始人
2024-03-30 12:58:00

题目

 

实验二  堆栈模拟队列

  • 实验目的

1、复习C/C++语言程序设计中的知识。

2、熟悉栈和队列的逻辑结构。

3、熟悉栈和队列的基本运算在两种存储结构上的实现,其中以熟悉栈和队列的操作为侧重点。

  • 实验内容和要求

[问题描述]

设已知有两个堆栈S1和S2,请用这两个堆栈模拟出一个队列Q。

所谓用堆栈模拟队列,实际上就是通过调用堆栈的下列操作函数:

  1. int IsFull(Stack S):判断堆栈S是否已满,返回1或0;
  2. int IsEmpty (Stack S ):判断堆栈S是否为空,返回1或0;
  3. void Push(Stack S, ElementType item ):将元素item压入堆栈S;
  4. ElementType Pop(Stack S ):删除并返回S的栈顶元素。

实现队列的操作,即入队void AddQ(ElementType item)和出队ElementType DeleteQ()。

[基本要求]

(1)输入首先给出两个正整数N1和N2,表示堆栈S1和S2的最大容量。随后给出一系列的队列操作:A item表示将item入列(这里假设item为整型数字);D表示出队操作;T表示输入结束。

(2)对输入中的每个D操作,输出相应出队的数字,或者错误信息ERROR:Empty。如果入队操作无法执行,也需要输出ERROR:Full。每个输出占1行。

[测试数据]

3 2

A 1 A 2 A 3 A 4 A 5 D A 6 D A 7 D A 8 D D D D T

[实现提示]

使用两个栈对数据进行一定的出入栈操作,模拟出出入对数据的顺序。

算法设计

1、主要思想:

1.当输入字符A时,将其后输入的数字入栈;

① s1没满直接压入s1;

② s1满了,弹出元素压入s2中,新元素压入s1中;

③ 其他情况输出Full;

2.当输入字符D时,将调用出栈函数;

① s2不空时,直接出;

② s2空,将s1中元素弹出压入s2中,最后在出栈;

③ 其他情况输出Empty;

3. 当输入字符T时,结束程序。

以题中所给测试数据为例,下表是具体操作过程

表一

步骤

S1

S2

1

1

Empty

2

1 2

Empty

3

1

2

4

Empty

Empty

5

3

Empty

6

3 4

Empty

7

3

4

8

Empty

Empty

9

5

Empty

10

 5 6

Empty

11

5

6

12

Empty

Empty

13

7

Empty

14

7 8

Empty

15

7

8

16

Empty

Empty

2、本程序包含三个模块

2.1 准备工作——主函数接收数据

1.接收到两个栈的长度时,首先应判断大小,s2长度应大于s1;

2.使用while循环接收字符,根据字符接收数据调用相应函数;

int main(){cin>>m1>>m2;int t;if(m1>m2){t=m1;m1=m2;m2=t;}char ch;while(cin>>ch)//接收指令字符{if(ch=='T')break;else if(ch=='A'){cin>>n;AddQ(n);//模拟入队}else DeleteQ();//模拟出队}return 0;}

2.2 模拟入队操作

1.s1没满直接压入s1;

2.s1满了,弹出元素压入s2中,新元素压入s1中;

3.其他情况输出Full;

 void AddQ(int n){if(s1.size()!=m1)//s1栈不满直接入栈{s1.push(n);}else if(s2.empty())//s1栈满时将s1中的数据压到s2中{while(!s1.empty()){s2.push(s1.top());s1.pop();}s1.push(n);}else cout<<"ERROR:Full"<

2.3模拟出队操作

1.s2不空时,直接出;

2.s2空,将s1中元素弹出压入s2中,最后在出栈;

3.其他情况输出Empty;

void DeleteQ(){if(!s2.empty())//s2不空时,直接出;{cout<
  • 实验结果

1.输入3 2

A 1 A 2 A 3 A 4 A 5 D A 6 D A 7 D A 8 D D D D T,输出结果如图1所示。

        

 

图1 实验结果

  1. 算法性能分析

(1)时间复杂度: 此算法从头到尾读入每个字符,若字符总长度为n,则此算法的时间复杂度为O(n)。

(2)空间复杂度:此算法在运行时所占用的空间取决于栈的大小,显然 ,他们的空间大小之和不会超过n,所以此算法的空间复杂度为O(n)。

  1. 总结

此次上机实验应用了栈实现了一次实际操作,完成了通过控制出入栈条件,实现了两个栈去模拟对列,不仅对此次编译程序的算法思想有了新的认识,还让我深刻地体会到了栈和队列的重要性以及其应用的方便,并且对栈和队列加深了印象,应用了书本中的算法思想,对我以后的编译以及完成新的程序有很大的帮助。

  1. 源程序(带注释)
#include using namespace std;stack s1;stack s2;int m1,m2,n;void AddQ(int n){if(s1.size()!=m1)//s1栈不满直接入栈{s1.push(n);}else if(s2.empty())//s1栈满时将s1中的数据压到s2中{while(!s1.empty()){s2.push(s1.top());s1.pop();}s1.push(n);}else cout<<"ERROR:Full"<>m1>>m2;int t;if(m1>m2){t=m1;m1=m2;m2=t;}char ch;while(cin>>ch)//接收指令字符{if(ch=='T')break;else if(ch=='A'){cin>>n;AddQ(n);//模拟入队}else DeleteQ();//模拟出队}return 0;}

相关内容

热门资讯

埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...