一.题意整理
用两个栈来实现一个队列,分别完成在队列尾部插入整数(push)和在队列头部删除整数(pop)的功能。队列 中的元素为int类型。保证操作合法,即保证pop操作时队列内已有元素。
二.思路整理
c++STL中的stack可以直接拿过来用,下面介绍一下STL中stack的用法:
push(x)将x入栈,时间复杂度为O(1)
top()获得栈顶元素,时间复杂度为O(1)
pop()用以弹出栈顶元素,时间复杂度为O(1)
empty()可以检测stack内是否为空,放回true为空,返回false为非空,时间复杂度为O(1)
size()返回stack内元素的个数,时间复杂度为O(1)
首先我们知道了栈的特点就是先进后出,我们就要了解队列这种数据结构。队列是一种先进先出的数据结构,我们可以利用两个栈来实现这种数据结构,一个栈用来实现入队列,一个栈用来实现出队列,一种“负负得正”的感觉。当一个栈全为空时,将另一个站的全部元素都放到该栈中,然后该栈元素全部出栈,进而实现了先进先出的队列了。
三.代码实现
class Solution
{
public:
void push(int node) {
stack1.push(node);
}
int pop() {
//当stack2全为空时,stack1全部到stack2 然后stack2再出栈(模拟出队列)
if (stack2.empty()) {
while (!stack1.empty()) {
stack2.push(stack1.top());
stack1.pop();
}
}
int ret = stack2.top();//返回栈顶元素 相当于队列的队头
stack2.pop();
return ret;
}
private:
stack<int> stack1;//入队列
stack<int> stack2;//出队列
};
时间复杂度: 利用STL,效率很高
空间复杂度: 需要利用栈来存储