PTA 基础实验3-2.5 堆栈模拟队列 (25分)

基础实验3-2.5 堆栈模拟队列 (25分)

题目选自PTA上堆栈模拟队列
因为堆栈是后进先出,队列是先进先出,所以堆栈倒过来输出就是队列的输出了。
那么我们用两个堆栈,一个模拟入列,一个模拟出列。题目首先是给了两个数字,要想
清楚哪个作为入队的堆栈,仔细想想很快发现只有小堆栈能做入队模拟 //因为大的如果作为入队,输出的时候要将入队的堆栈全部放入出队的堆栈,这样会导致放不下

所以现在思路就很清晰了,然后要思考两个问题,入队时S1满了怎么办?(这时S2还有空位) 出队列时S2空了怎么办?(S1还有元素) .
很显然哈 S1满了的话就把S1的元素挪到S2中,注意:S2不空的时候是不能往里面挪用元素的。
S2空了的话将S1的元素挪入S2再输出。
现在附上AC代码 o.o 第一次写题解 谢谢观看

#include
#include
//想法就是一个输入栈 一个输出栈
//输入栈放满了 就放到输出栈
//输出栈不为0时不可放入其他元素
//输出时 如果输出栈有就直接输出
//没有就将输入栈的数字全部装入输出栈
//在输出
using namespace std ;
int M1,M2 ;
int top1=-1,top2=-1;
int a[1000],b[1000];
int main()
{
char c =0 ;
cin >> M1 >> M2 ;
int mins = min(M1,M2) ;
int maxx = max(M1,M2) ;
do
{
cin >> c ;
if(c==‘A’)
{
int x ;
cin >> x ;
if(top1<mins-1) //top最多放到1;
{
a[++top1] = x ;
}
else if(top2==-1 ) //将A的转移到B
{
while( top1!=-1 )
{
b[++top2] = a[top1–] ;
} // 腾过去后
a[++top1] = x; //把x赋值

	   }   
	   else 
	   { 
	      cout << "ERROR:Full" << endl  ;			   
	   }    	   	 
  }
  else if ( c=='D') //把A移到B直到 TOP1=0 
  {
      	if(top2!=-1)
      	{
      		cout << b[top2--] << endl ;
		}
		else if(top1!=-1)
		{
		    while(top1!=-1)
			{
				b[++top2] = a[top1--] ; 
			}	
			cout << b[top2--] << endl ;
		} 
		else 
		{
			cout << "ERROR:Empty" <<endl ; 
		}
  } 

}while(c!=‘T’) ;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值