PTA-7-22 堆栈模拟队列

题目: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;
                }
            }
        }
}

猜你喜欢

转载自blog.csdn.net/qq_39681830/article/details/81268034