首页 > 代码库 > 用两个栈实现一个队列
用两个栈实现一个队列
思路:假设有两个空栈s1,s2,用s1提供入队功能,s2提供出队功能。
push操作:直接push到s1.
push操作:直接push到s1.
pop操作:如果s2不为空,直接弹出s2的数据,否则依次弹出s1的数据到s2中,再取2栈顶的数据.
#include <iostream> #include <stack> using namespace std; template<typename T> class Queue { public: Queue() : qsize(0) { } void push(const int &t) { s1.push(t); ++ qsize; } T front(); void pop(); size_t size() { return qsize; } bool empty() { return qsize == 0; } private: size_t qsize; stack<int> s1; stack<int> s2; }; template<typename T> T Queue<T>::front() { if (s2.empty()) { if (s1.empty()) throw; while (!s1.empty()) { s2.push(s1.top()); s1.pop(); } } return s2.top(); } template<typename T> void Queue<T>::pop() { if (s2.empty()) { while (!s1.empty()) { s2.push(s1.top()); s1.pop(); } } if (!s2.empty()) { s2.pop(); } --qsize; } int main() { Queue<int> mq; for (int i = 0; i < 10; ++i) mq.push(i); while (!mq.empty()) { cout << mq.front() << endl; mq.pop(); } return 0; }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。