1. 用栈实现队列(LeetCode 232)
题目:请你仅使用两个栈实现队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty):
实现 MyQueue 类:
- void push(int x) 将元素 x 推到队列的末尾
- int pop() 从队列的开头移除并返回元素
- int peek() 返回队列开头的元素
- boolean empty() 如果队列为空,返回 true ;否则,返回 false
思路: - 用stackin和stackout两个栈模拟队列
- 在dumpstackin时,需要先确认stackout是否为空;只有stackout为空时才能将stackin中的内容压入
java:
- Stack常用函数:
push()
,pop()
,empty()
,peek()
(返回栈顶元素,但不删除)
class MyQueue {
// 用两个栈模拟队列
Stack<Integer> stackin;
Stack<Integer> stackout;
public MyQueue() {
stackin = new Stack<>();
stackout = new Stack<>();
}
public void push(int x) {
stackin.push(x);
}
// 将stackin中的元素全部放到stackout中
private void dumpstackin(){
//stackout清空后才能继续压入,否则顺序会出现问题
if(!stackout.empty()) return;
while (!stackin.empty()){
stackout.push(stackin.pop());
}
}
//移除并返回队列开头元素
public int pop() {
dumpstackin();
return stackout.pop();
}
//返回队列开头元素
public int peek() {
dumpstackin();
return stackout.peek();
}
public boolean empty() {
return stackin.empty() && stackout.empty();
}
}
标签:队列,stackin,pop,int,算法,stackout,empty
From: https://www.cnblogs.com/hifrank/p/18051395