简单的双栈模拟队列
输入栈模拟入队
输出栈模拟退队
如果退队时输出栈输出栈都为空则说明队列为空,如果输出栈不为空则直接弹栈,如果输入栈不为空输出栈为空就将输入栈内元素全部弹出并压入输出栈,然后输出栈弹栈
#include <stack>
template<class T>
class Queue {
public:
void enQueue(const T & elem);
void deQueue();
private:
std::stack<T> m_sInput; // 输入栈模拟入队
std::stack<T> m_sOutput; // 输出栈模拟退队
};
template<class T>
void Queue<T>::enQueue(const T & elem)
{
m_sInput.push(elem);
}
template<class T>
void Queue<T>::deQueue()
{
if (m_sOutput.empty()) {
if (m_sInput.empty()) {
return;
}
while (!m_sInput.empty()) {
m_sOutput.push(m_sInput.top());
m_sInput.pop();
}
}
m_sOutput.pop();
}
int main() {
Queue<int> q;
q.enQueue(1);
q.enQueue(3);
q.enQueue(2);
q.deQueue();
q.deQueue();
q.deQueue();
return 0;
}