实现使用两个堆栈队列
FIFO队列是一种数据结构(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-10-02 03:54:59