算法思想:利用两个栈代替队列,数据依次进栈1,然后依次出栈1 进栈2,最后出栈2.得到的顺序和队列刚好是一样的。
LeetCode原题链接
class MyQueue {
int[] stack1;
int[] stack2;
int top1=-1;
int top2=-1;
/** 通过无参构造初始化栈1和2. */
public MyQueue() {
stack1=new int[100];//由于题目要求push操作不超过100次,所以初始化栈100
stack2=new int[100];
}
/** Push操作的时候,先进栈1,在push操作里,数据不进行栈1到栈2的转移*/
public void push(int x) {
stack1[++top1]=x;
}
/** pop操作获得队头元素,此时需要先判断栈2中是否有数据,如果有则弹出,如果没有,数据则进行栈1到栈2的转移 */
public int pop() {
if(top2>-1){
return stack2[top2--];
}
while(top1>-1){
stack2[++top2]=stack1[top1--];
}
return stack2[top2--];
}
/** peek函数为查看队头元素,此操作和pop操作一样,唯一的区别的就是————查看元素不需要移动指针top2 */
public int peek(){
if(top2>-1){
return stack2[top2];
}
while(top1>-1){
stack2[++top2]=stack1[top1--];
}
return stack2[top2];
}
/** 此函数是判断自己创造的队列是否为空,因为是两个栈,所以要判断top1和top2 */
public boolean empty() {
if(top1==-1&&top2==-1){
return true;
}else{
return false;
}
}
}
/**
* Your MyQueue object will be instantiated and called as such:
* MyQueue obj = new MyQueue();
* obj.push(x);
* int param_2 = obj.pop();
* int param_3 = obj.peek();
* boolean param_4 = obj.empty();
*/