#include <queue> class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param order string字符串vector * @return string字符串vector */ queue<int>q1;//一个队列也能实现栈 queue<int>q2;//q2:???你创立我干嘛 void push(int element){ q1.push(element); } //等价于将元素 element 压入栈顶。 int pop(){ int s = q1.size(); s--; while (s--) { q1.push(q1.front()); q1.pop(); } int f = q1.front(); q1.pop(); return f; } //循环移动并返回队列尾(栈顶)元素 int top(){ return q1.back(); } //返队列回栈顶元素。 bool empty() { return q1.empty(); }//如果队列栈是空的,返回 true ;否则,返回 false 。 };
算法基本思想:
使用两个队列q1和q2来实现栈的功能。push操作直接将元素压入q1队列中。pop操作需要将q1队列中的元素移动到q2队列中,直到q1队列中只剩下一个元素,然后将该元素弹出并返回。top操作直接返回q1队列的队尾元素。empty操作判断q1队列是否为空。
时间复杂度:
push操作的时间复杂度为O(1);
pop操作的时间复杂度为O(n),其中n为栈中元素的个数;
top操作的时间复杂度为O(1);
empty操作的时间复杂度为O(1)。
空间复杂度:
使用了两个队列,因此空间复杂度为O(n),其中n为栈中元素的个数。