用两个栈实现队列
题目:
用两个栈来实现一个队列,使用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--];
}