232.Implement Queue Using Stack
232.Implement Queue Using Stacks
难度:Easy
使用栈实现队列的下列操作:
push(x) -- 将一个元素放入队列的尾部。 pop() -- 从队列首部移除元素。 peek() -- 返回队列首部的元素。 empty() -- 返回队列是否为空。
1
示例:
2
3
MyQueue queue = new MyQueue();
4
5
queue.push(1);
6
queue.push(2);
7
queue.peek(); // 返回 1
8
queue.pop(); // 返回 1
9
queue.empty(); // 返回 false
Copied!
说明:
你只能使用标准的栈操作 -- 也就是只有 push to top, peek/pop from top, size, 和 is empty 操作是合法的。 你所使用的语言也许不支持栈。你可以使用 list 或者 deque(双端队列)来模拟一个栈,只要是标准的栈操作即可。 假设所有操作都是有效的 (例如,一个空的队列不会调用 pop 或者 peek 操作)。
队列的特性是FIFO,栈的特性是LIFO,两个栈就可实现FIFO。
1
class MyQueue {
2
private:
3
stack<int> mq1;
4
stack<int> mq2;
5
public:
6
/** Initialize your data structure here. */
7
MyQueue() {
8
9
}
10
11
/** Push element x to the back of queue. */
12
void push(int x) {
13
if(mq2.empty())
14
mq2.push(x);
15
else
16
{
17
while(!mq2.empty())
18
{
19
mq1.push(mq2.top());
20
mq2.pop();
21
}
22
mq2.push(x);
23
while(!mq1.empty())
24
{
25
mq2.push(mq1.top());
26
mq1.pop();
27
}
28
}
29
30
}
31
32
/** Removes the element from in front of queue and returns that element. */
33
int pop() {
34
int t=mq2.top();
35
mq2.pop();
36
return t;
37
38
39
}
40
41
/** Get the front element. */
42
int peek() {
43
return mq2.top();
44
}
45
46
/** Returns whether the queue is empty. */
47
bool empty() {
48
return mq2.empty();
49
}
50
};
51
52
/**
53
* Your MyQueue object will be instantiated and called as such:
54
* MyQueue* obj = new MyQueue();
55
* obj->push(x);
56
* int param_2 = obj->pop();
57
* int param_3 = obj->peek();
58
* bool param_4 = obj->empty();
59
*/
Copied!
Copy link