题目
用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
方法1:stack1作为主存,stack2作为出队时的辅助空间
- 思路
- 入队操作:将元素直接添加到stack1
- 出队操作:将stack1的元素全部移动到stack2,出队stack2的栈顶元素,再将stack2的元素全部移动到stack1
- 实现
public void push(int value) {
stack1.push(value);
}
public int pop() {
int result = -1;
if (stack1.empty()){
return -1;
}
//将栈1的全部元素先入后出移到栈2
while (!stack1.empty()){
stack2.push(stack1.pop());
}
//删除栈2的栈顶
result = stack2.pop();
//将栈2的全部元素先入后出移到栈1
while (!stack2.empty()){
stack1.push(stack2.pop());
}
return result;
}
- 结果
方法2: stack1和stack2全部作为主存
- 思路
- 入队操作:将元素放入有元素的栈中,第一个元素默认添加到stack1
- 出队操作:1.当有元素栈中的栈顶元素不是最后一个入栈元素时,直接出队。2.当有元素栈中的栈顶元素是最后一个入栈元素时,将有元素栈中的除栈底外所有元素移动到另一个空栈中,将栈底出队
- 实现
public void push(int value) {
a = value;
if (stack2.empty()){
stack1.push(value);
}else {
stack2.push(value);
}
}
public int pop() {
int result = -1;
if (stack1.empty() && stack2.empty()){
return result;
}
if (!stack1.empty() && stack1.peek() != a){
return stack1.pop();
}
if (!stack2.empty() && stack2.peek() != a){
return stack2.pop();
}
if (stack2.empty()){
while (stack1.size() > 1){
stack2.push(stack1.pop());
}
result = stack1.pop();
}else {
while (stack2.size() > 1){
stack1.push(stack2.pop());
}
result = stack2.pop();
}
return result;
}
- 结果