一、题目
如何仅用栈结构实现队列结构?
二、解题思路
栈:先进后出。
队列:先进先出。
定义两个栈:push 和 pop。
进队列:
- 只要出现新的数据,就压入 push 栈中。
出队列:
- 如果 push 栈和 pop 栈都为空,报错。
- 如果 pop 栈为空并且 push 栈中有数据,就将 push 中的所有数据都倒入 pop 栈中,然后弹出 pop 栈的栈顶并作为返回值返回。
- 如果 pop 栈不为空,弹出 pop 栈的栈顶并作为返回值返回。
返回队首:
- 返回 pop 栈的栈顶值(不弹出),其余与出队列操作相同。
三、代码实现(Java)
import java.util.Stack;
public class StackToQueue {
private Stack<Integer> stackPush;
private Stack<Integer> stackPop;
// 初始化队列
public StackToQueue() {
stackPush = new Stack<>();
stackPop = new Stack<>();
}
// 入队
public void EnQueue(int obj) {
stackPush.push(obj);
}
// 出队
public int DeQueue() {
if (stackPush.empty() && stackPop.empty())
throw new Error("The Queue is empty!");
if (!stackPop.empty())
return stackPop.pop();
while (!stackPush.empty()) {
stackPop.push(stackPush.pop());
}
return stackPop.pop();
}
// 查看队首
public int peek() {
if (stackPush.empty() && stackPop.empty())
throw new Error("The Queue is empty!");
if (!stackPop.empty())
return stackPop.peek();
while (!stackPush.empty()) {
stackPop.push(stackPush.pop());
}
return stackPop.peek();
}
}