题目:https://pintia.cn/problem-sets/15/problems/837
输入两个数a1,a2分别作为堆栈的容量,然后以输入字母A,D,T作为操作指令,其中A表示再输入一个数x,并将x放入队列里,若队列满,则输出ERROR:Full;其中D表示输出队列的元素,T表示退出;
思路:
将容量小的栈作为入队栈,容量大的作为出队栈。入队时,若入队栈已满且出队栈不空则队列已满;入队栈满出队栈空,则将入队栈的所有元素放入出队栈里;入队栈空则放入入队栈里。出队时,若入队栈出队栈为空,则队列为空;若出队栈为空,则将入队栈所有元素放入出队栈并输出出队栈第一个元素;
#include<iostream>
using namespace std;
#define MAX 100
int main(){
int s1[MAX],s2[MAX];
int a1,a2,r1=0,r2=0,x;
char ch;
cin>>a1>>a2;
if(a1>a2){
int tmp=a1;
a1=a2;
a2=tmp;
}
while(cin>>ch&&ch!='T'){
if(ch=='A'){
cin>>x;
if(r1==a1&&r2)
cout<<"ERROR:Full"<<endl;
else if(r1==a1){
while(r1)
s2[++r2]=s1[r1--];
s1[++r1]=x;
}
else s1[++r1]=x;
}
else{
if(!r1&&!r2)
cout<<"ERROR:Empty"<<endl;
else{
if(!r2){
while(r1)
s2[++r2]=s1[r1--];
}
cout<<s2[r2--]<<endl;
}
}
}
}