#include <stdio.h>
#define MaxSize 50
//创建栈以及栈的基本操作
typedef struct Stack{
    int data[MaxSize];
    int top;
}Stack;

void InitStack(Stack &S){
    S.top=0;
}

bool StackOverflow(Stack S){
    if(S.top==MaxSize){printf("overflow");return true;}
    return false;
}

bool StackEmpty(Stack S){
if(S.top==0){return true;}
return false;
}

bool StackPush(Stack &S,int e){
    if(StackOverflow(S)){printf("overflow");return false;}
    S.data[S.top]=e;S.top+=1;
    return true;
}

bool StackPop(Stack &S,int *x){
    if(StackEmpty(S)){printf("empty");return false;}
    *x=S.data[S.top-1];
    S.top-=1;
    return true;
    
}

//利用两个栈当做队列使用
bool QueueEmpty(Stack S1,Stack S2){
    if(StackEmpty(S1) && StackEmpty(S1)){return true;}
    return false;
}

bool QueueOverflow(Stack S1,Stack S2){
    if(StackOverflow(S1) && !StackEmpty(S2)){return true;}
    return false;
}

bool QueuePush(Stack &S1 ,Stack &S2 ,int e){
    if(QueueOverflow(S1,S2)){printf("error\n");return false;}
    if(StackOverflow(S1) && StackEmpty(S2)){
        while(!StackEmpty(S1)){int x;StackPop(S1,&x);StackPush(S2,x);}
    }
    S1.data[S1.top]=e;S1.top+=1;
    return true;
}

bool QueuePop(Stack &S1 ,Stack &S2, int *x){
    if(QueueEmpty(S1,S2)){printf("error");return false;}
    if(StackEmpty(S2)){while(!StackEmpty(S1)){int x;StackPop(S1,&x);StackPush(S2,x);}}
    int e;
    StackPop(S2,&e);*x=e;
    return true;
}

int main(){
    Stack S1,S2;
    InitStack(S1);
    InitStack(S2);
    QueuePush(S1,S2,110);
    QueuePush(S1,S2,99);
    int x;
    QueuePop(S1,S2,&x);
    printf("%d\n",x);
    QueuePop(S1,S2,&x);
    return 0;
}