题目链接:225.用队列实现栈
关键词:队列,栈
解题思路
- 两种思路
- 压入元素复杂度
O
(
1
)
O(1)
O(1),弹出元素复杂度
O
(
n
)
O(n)
O(n)
- 压入元素时,队列与栈是相同的操作
- 弹出元素时,对于栈来说弹出的是栈顶元素,对于队列来说需要弹出的是队尾元素
- 压入元素复杂度
O
(
n
)
O(n)
O(n),弹出元素复杂度
O
(
1
)
O(1)
O(1)
- 压入元素时,先将新元素压入队尾,然后将它前边的所有元素弹出并压入新元素的后边,实现逆序存储
- 弹出元素时,只要弹出队头元素即可
- 压入元素复杂度
O
(
1
)
O(1)
O(1),弹出元素复杂度
O
(
n
)
O(n)
O(n)
注意事项
- 队列有两种实现方式
- 使用循环队列,对于要弹出的元素,先将它前边的所有元素弹出并压入它后方,再弹出该元素
- 使用双队列,压入元素时始终向非空队列压入,弹出时先将前方元素都压入另一队列,再弹出该元素,然后交换两个队列
class MyStack {
public:
/** Initialize your data structure here. */
MyStack() {
}
/** Push element x onto stack. */
void push(int x) {
content_queue_.push(x);
}
/** Removes the element on top of the stack and returns that element. */
int pop() {
for(int i = 0; i < content_queue_.size() - 1; ++i)
{
content_queue_.push(content_queue_.front());
content_queue_.pop();
}
int temp = content_queue_.front();
content_queue_.pop();
return temp;
}
/** Get the top element. */
int top() {
return content_queue_.back();
}
/** Returns whether the stack is empty. */
bool empty() {
return content_queue_.empty();
}
private:
std::queue<int> content_queue_;
};