用两个栈实现队列

题目:

用两个栈来实现一个队列,使用n个元素来完成 n 次在队列尾部插入整数(push)和n次在队列头部删除整数(pop)的功能。 队列中的元素为int类型。保证操作合法,即保证pop操作时队列内已有元素。

示例:

输入:["PSH1","PSH2","POP","POP"]

返回值:1,2

说明:

"PSH1":代表将1插入队列尾部

"PSH2":代表将2插入队列尾部

"POP“:代表删除一个元素,先进先出=>返回1

"POP“:代表删除一个元素,先进先出=>返回2

输入:["PSH2","POP","PSH1","POP"]

返回值:2,1

解题思路:

利用两个栈S1和S2来模拟一个队列,当需要向队列中插入元素时,用S1来存放已输入的元素,即S1进行入栈操作。当需要出队时,则对S2进行出栈操作。由于从栈中取出的元素顺序是原顺序的逆序,所有必须先将S1中的元素全部出栈并入栈到S2中,再在S2中执行出栈操作,即可实现出队操作,而在执行此操作前必须判断S2是否为空。

代码示例:

```/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param node int整型 
 * @return 无
 *
 * C语言声明定义全局变量请加上static,防止重复定义
 */
int s1[1000];
int s2[1000];
int top1=0;
int top2=0;
void push(int node ) {
    // write code here
    s1[top1++]=node;
}

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param 无 
 * @return int整型
 */
int pop() {
    // write code here
    int a;
    if(top2==0){
        while(top1!=0){
            top1--;
            a=s1[top1];
            top2++;
            s2[top2]=a;
            //s1[top1--];
        }
    }
        return s2[top2--];
}