leetcode232_用栈实现队列
1、题目
2、分析
C++存在这样几种容器,vector,list, deque
vector的优点是线性空间,随机存取的效率高,但是插入删除的效率不高。
list使用双向链表实现,空间不连续,但是插入删除的效率高,随机存取的效率不高。
deque综合了两者的优点,使用线性空间,随机存取的效率高,可以实现头尾节点的插入删除,但是实现结构复杂。
stack和queue属于容器适配器,都是使用上面的容器来实现底层逻辑,栈一般默认的是使用deque来实现底层逻辑,当然我们也可以自己修改。
今天要实现的功能就是如何用stack实现quene。而且只使用push(),pop(),top(), empty()等几个函数。
具体分析参考链接:https://leetcode-cn.com/problems/implement-queue-using-stacks/solution/tu-jie-guan-fang-tui-jian-ti-jie-yong-zh-4hru/
具体需要注意的是,在stack的操作里面,pop操作直接删除,是不会反悔元素的。
3、代码
class MyQueue { public: stack<int> stack_in; stack<int> stack_out; MyQueue() { } void push(int x) { stack_in.push(x); } int pop() { //stack out为空的时候 if(stack_out.empty()){ while(!stack_in.empty()){ int pre = stack_in.top(); stack_in.pop(); stack_out.push(pre); } } int pre = stack_out.top(); stack_out.pop(); return pre; } int peek() { int outcome = this->pop(); stack_out.push(outcome); return outcome; } bool empty() { return (stack_in.empty() && stack_out.empty()); } }; /** * Your MyQueue object will be instantiated and called as such: * MyQueue* obj = new MyQueue(); * obj->push(x); * int param_2 = obj->pop(); * int param_3 = obj->peek(); * bool param_4 = obj->empty(); */
纵一苇之所如,临万顷之茫然。