用栈实现队列-用队列实现栈
栈的特点:FILO(First In Last Out)
仅能从栈顶插入,删除元素。
最基本的接口包括push() —— 从栈顶压入元素 ,pop()——从栈顶弹出元素
队列的特点:FIFO(First In First Out)
仅能从队头删除元素,从队尾插入元素。
最基本的接口包括enque()——从队尾插入元素, deque()——从队头删除元素
思路:
新入队列的元素压入stack1中,当元素出队列时,若stack2为空,则将stack1的全部元素依次弹出,压入stack2中,这样stack2的栈顶元素即为队头元素。
template<typename T>class MyStack{public:T top();void push(const T& ele);void pop();private:std::queue<T> queue1;std::queue<T> queue2;};template<typename T>T MyStack<T>::top(){T ele;if (queue1.empty() && !queue2.empty()) {ele = queue2.back();}else if (!queue1.empty() && queue2.empty()) {ele = queue1.back();}return ele;}template<typename T>void MyStack<T>::push(const T& ele){if (queue1.empty()){queue2.push(ele);}else if (queue2.empty()){queue1.push(ele);}}template<typename T>void MyStack<T>::pop(){if (queue1.empty()){while(queue2.size() > 1){queue1.push(queue2.front());queue2.pop();}if (!queue2.empty()){queue2.pop();}}else if (queue2.empty()){while(queue1.size() > 1){queue2.push(queue1.front());queue1.pop();}if (!queue1.empty()){queue1.pop();}}}