【剑指offer】面试题:两个队列实现栈
2014-05-18 18:35
579 查看
不像俩个栈实现队列,两次先进后出之后就是先进先出,队列几次先进先出仍然是先进先出,那么我们看看实际情况,将队列里除最后一个以外,全都拿走,剩下的这最后一个就是想要的结果,那么先前拿走的那些放哪里呢?给了两个队列,那就放在另外一个队列里。若是在出的话,就对另一个队列进行相同的操作。
这个实现的过程中,每次出栈,都要将队列里的元素折腾一次,其实也不用两个队列,用一个队列就好了,把最后一个之前的元素出队再入队就行了。
template<class valueType> class MyStack{ public: MyStack() { push_queue = 0;} valueType pop(); void push(const valueType& ); private: // int queueNumbers; std::queue<valueType> Queue1; std::queue<valueType> Queue2; char push_queue; private: std::queue<valueType>& PushQueue(){ if(push_queue == 0) return Queue1; else return Queue2; } std::queue<valueType>& PopQueue(){ if(push_queue == 1) return Queue1; else return Queue2; } }; template<class valueType> void MyStack<valueType>::push(const valueType& value){ PushQueue().push(value); } template<class valueType> valueType MyStack<valueType>::pop(){ assert(!PushQueue().empty()); while (PushQueue().size() != 1) { PopQueue().push(PushQueue().front()); PushQueue().pop(); } valueType cur_front = PushQueue().front(); PushQueue().pop(); push_queue = !push_queue; return cur_front; }
这个实现的过程中,每次出栈,都要将队列里的元素折腾一次,其实也不用两个队列,用一个队列就好了,把最后一个之前的元素出队再入队就行了。
template<class valueType> class MyStack2{ public: void push(const valueType& ); valueType pop(); private: std::queue<valueType> Queue; }; template<class valueType> void MyStack2<valueType>::push(const valueType& value){ Queue.push(value); } template<class valueType> valueType MyStack2<valueType>::pop(){ assert(!Queue.empty()); int queueLen = Queue.size(); int index = 0; while(index < queueLen - 1){ Queue.push(Queue.front()); Queue.pop(); index++; } valueType front_val = Queue.front(); Queue.pop(); return front_val; }
相关文章推荐
- 【剑指offer】2.3.5栈和队列——面试题7:用两个栈实现队列
- 剑指offer之面试题7用两个栈实现一个队列
- 剑指offer--面试题7:用两个栈实现队列--Java实现
- 剑指Offer----面试题七:用两个栈实现队列
- 【剑指offer 面试题7】用两个栈实现队列
- 剑指offer之面试题7:用两个栈实现队列
- 剑指Offer面试题7用两个栈实现队列
- 剑指Offer面试题7:用两个栈实现队列 Java实现
- 剑指offer--面试题7: 用两个栈实现队列
- 剑指offer面试题7:用两个栈实现队列
- 【剑指Offer面试题】 九度OJ1512:用两个栈实现队列
- 剑指offer 面试题7 两个栈实现队列
- 剑指Offer面试题7(Java版):用两个栈实现队列与用两个队列实现栈
- 剑指offer面试题java实现之题7:用两个栈模拟一个队列的入队和出队操作
- 【剑指offer】面试题7:用两个栈实现队列
- 剑指offer面试题7——用两个栈实现队列
- 剑指Offer:面试题7 用两个栈实现队列
- 【剑指offer】面试题七:用两个栈实现队列
- [剑指offer][面试题07-扩展]用两个队列实现栈
- [剑指offer][面试题07]用两个栈实现队列