leetcode225_用队列实现栈
1、题目
2、分析
其实一个队列就可以了,就是我们使用一个队列,当需要查询stack头部的元素的时候,可以将其他元素弹出,然后压如的元素底部。
这样pop是O(n)的操作,而其他的是O(1)的操作(如果不考虑queue内部实现复杂度的话)
3、代码
class MyStack { public: queue<int> pre; MyStack() { } void push(int x) { pre.push(x); } int pop() { int size = pre.size(); size = size-1; //弹出n-1个数字,然后重新压如 while(size){ int num = pre.front(); pre.pop(); pre.push(num); size--; } int num_pre = pre.front(); pre.pop(); return num_pre; } int top() { int size = pre.size(); size = size-1; //弹出n-1个数字,然后重新压如 while(size){ int num = pre.front(); pre.pop(); pre.push(num); size--; } int num_pre = pre.front(); pre.pop(); pre.push(num_pre); return num_pre; } bool empty() { return pre.empty(); } }; /** * Your MyStack object will be instantiated and called as such: * MyStack* obj = new MyStack(); * obj->push(x); * int param_2 = obj->pop(); * int param_3 = obj->top(); * bool param_4 = obj->empty(); */
纵一苇之所如,临万顷之茫然。