LeetCode232——Implement Queue using Stacks
这题,评级是easy,按照思路也挺顺的。奏是一个字,溜儿。
用栈实现一个队列,我实在想不出为啥要这么做,不过我们还是放下这些偏见立地成佛吧。
来,因为队列先进先出,栈先进后出,那么一个栈肯定搞不定了,不然你要把所有元素都倒出来找第一个元素。所以用两个栈吧。
1.压入队列,那么将一个队列做入口,一个队列做出口。进队简单,直接push进入口栈就可以了。
2.出队操作,pop操作本身就是返回一个void。所以,首先判断出口栈是不是空的,不是空的就直接pop出口栈的栈顶元素。如果出口栈是空的拿么入口栈中有没有元素,入口栈中有元素,将入口栈的元素压入出口栈中,pop掉入口栈的元素,出口栈栈顶pop实现操作。但是在移动值的时候需要使用top不能直接pop因为pop返回的是void
3.取队首元素,和出队操作是一样的,返回top就可以了。
4.是否为空,简单了,两个都为空就返回空。
class Queue { public: stack<int>stkIn; stack<int>stkOut; // Push element x to the back of queue. void push(int x) { stkIn.push(x); } // Removes the element from in front of queue. void pop(void) { if(!stkOut.empty()) { stkOut.pop(); } else { while(!stkIn.empty()) { stkOut.push(stkIn.top()); stkIn.pop(); } stkOut.pop(); } } // Get the front element. int peek(void) { if(!stkOut.empty()) { return stkOut.top(); } else { while(!stkIn.empty()) { stkOut.push(stkIn.top()); stkIn.pop(); } return stkOut.top(); } } // Return whether the queue is empty. bool empty(void) { return stkIn.empty() && stkOut.empty(); } };