如何使用两个栈模拟队列操作
2014-03-25 19:18
330 查看
思路分析:一个为插入栈,另一个为弹出栈,可以认为插入站提供入队列的功能,弹出栈提供出队列的功能。如果弹出栈不为空,则直接弹出它的数据。如果弹出栈为空,则依次弹出插入栈的数据,放入弹出栈中,再弹出它的数据。
代码如下:
代码如下:
#include "stdafx.h" #include <iostream> #include <stack> using namespace std; template <typename T> class QueueByDoubleStack { public: size_t size(); bool empty(); void push(T t); void pop(); T top(); private: stack<T> s1; stack<T> s2; }; template <typename T> size_t QueueByDoubleStack<T>::size() { return s1.size() + s2.size(); } template <typename T> bool QueueByDoubleStack<T>::empty() { return s1.empty() && s2.empty(); } template <typename T> void QueueByDoubleStack<T>::push(T t) { s1.push(t); } template <typename T> void QueueByDoubleStack<T>::pop() { if (s2.empty()) { while (!s1.empty()) { s2.push(s1.top()); s1.pop(); } } s2.pop(); } template <typename T> T QueueByDoubleStack<T>::top() { if (s2.empty()) { while (!s1.empty()) { s2.push(s1.top()); s1.top(); } } return s2.top(); } int main() { QueueByDoubleStack<int> q; for (int i = 0; i < 10; i++) { q.push(i); } while (!q.empty()) { cout << q.top() << ' '; q.pop(); } cout << endl; getchar(); return 0; }
相关文章推荐
- 如何用两个栈模拟队列操作
- 002使用两个栈模拟队列的基本操作
- 使用两个栈模拟队列的操作
- 使用模板类,实现用两个栈模拟队列的功能
- 如何在VB中操作EXCEL(一段代码,两个可以使用的过程)
- 面试题9:用两个栈模拟一个队列的操作
- 如何用两个队列实现一个栈,并分析有关栈操作的运行时间。
- 剑指offer面试题java实现之题7:用两个栈模拟一个队列的入队和出队操作
- 剑指offer之两个栈模拟队列操作
- 【笔面大全】使用两个栈模拟队列
- 两个队列模拟栈的操作(stl实现)
- java使用两个栈模拟队列的实现
- 数据结构复习之用两个栈模拟队列操作
- 自定义栈的实现及使用两个栈模拟队列
- 用两个栈模拟队列操作
- C语言:使用两个栈模拟一个队列
- 如何在一台电脑上使用两个git@osc的账号进行操作
- 如何用两个栈来实现一个队列,并分析有关队列操作的运行时间。
- 如何用两个队列实现一个栈,并分析有关栈操作的运行时间。
- 如何使用Jedis操作Redis消息队列