使用两个栈实现一个队列
队列是先进先出的数据结构(FIFO),栈是先进后出的数据结构(FILO),
用两个栈来实现队列的最简单方式是:进入队列则往第一个栈压栈,
出队列则将第一个栈的数据依次压入第二个栈,然后出栈.
两条规则:
1)进队列,则直接压入第一个栈
2)出队列,若果第二个栈不为空,直接pop(),如过第二个栈为空,
则把第一个栈中的数据全部压入第二个栈(第一个栈此时为空)。
实际写代码时注意栈为空的情况。
代码:
#include <iostream> #include <stack> class Queue { public: Queue() {} ~Queue() {} void push(int vData) { m_First.push(vData); } void pop() { if (m_Second.empty()) { if (m_First.empty()) { std::cout << "the queue is empty" << std::endl; return ; } move(m_First, m_Second); m_Second.pop(); } } int top() { if (m_Second.empty()) { if (m_First.empty()) { std::cout << "the queue is empty" << std::endl; return ; } move(m_First, m_Second); } return m_Second.top(); } int back() { if (m_First.empty()) { if (m_Second.empty()) { std::cout << "the queue is empty" << std::endl; return ; } move(m_Second, m_First); } return m_First.top(); } private: void move(std::stack<int>& vL, std::stack<int>& vR) { while (!vL.empty()) { vR.push(vL.top()); vL.pop(); } } private: std::stack<int> m_First; std::stack<int> m_Second; };
时间: 2024-08-01 22:43:10