Description: simulate a stack with two queues. The source code of stack and queue has been provided.
This article is reproduced.
Address: http://blog.csdn.net/wangyangkobe/article/details/5910362
@Wangyangkobe
# Include <cstdlib> # include <iostream> # include <assert. h> # include <deque> using namespace STD;/* two queues simulate a stack * // * queue a and queue B into the stack: Push the elements into non-empty queues in sequence, the first element overwrites column A to the stack: The first n-1 elements of queue a are poured to queue B and the nth elements are removed. At this time, the data is in B, and the next operation is performed on B. Stack top: place the first n-1 elements of queue a to queue B, and use the nth element as the stack top */template <typename T> class mystack {public: // In the stack, the first element enters the queue deque1, and each element enters the non-empty queue void push (t element) {If (deque1.empty () & deque2.empty ()) {deque1.push _ back (element);} else if (! Deque1.empty () & deque2.empty () {deque1.push _ back (element);} else if (deque1.empty ()&&! Deque2.empty () {deque2.push _ back (element) ;}// the first n-1 elements of a non-empty queue are transferred to another empty queue, delete the nth element of a non-empty queue, void POP () {If (! Deque1.empty () {int size = deque1.size (); For (INT I = 0; I <size-1; I ++) {deque2.push _ back (deque1.front ()); deque1.pop _ Front ();} deque1.pop _ Front ();} else {int size = deque2.size (); For (INT I = 0; I <size-1; I ++) {deque1.push _ back (deque2.front (); deque2.pop _ Front ();} deque2.pop _ Front () ;}/// stack top element, transfers the first n-1 elements of a non-empty queue to another empty queue, and returns the nth element of the non-empty queue to t top () {If (! Deque1.empty () {int size = deque1.size (); For (INT I = 0; I <size-1; I ++) {deque2.push _ back (deque1.front ()); deque1.pop _ Front ();} t temp = deque1.front (); deque1.pop _ Front (); deque2.push _ back (temp); Return temp;} else {int size = deque2.size (); for (INT I = 0; I <size-1; I ++) {deque1.push _ back (deque2.front (); deque2.pop _ Front ();} t temp = deque2.front (); deque2.pop _ Front (); deque1.push _ back (temp); Return temp ;}// whether the stack is empty Bool empty () {return (deque1.empty () & deque2.empty ();} PRIVATE: deque <t> deque1; deque <t> deque2 ;}; int main (INT argc, char * argv []) {mystack <int> my; For (INT I = 0; I <10; I ++) {My. push (I) ;}while (! My. Empty () {cout <my. Top () <""; my. Pop () ;}cout <Endl ;}