面试---两个栈实现一个队列
2015-10-26 22:55
260 查看
实现思路:插入操作在stack1中进行,删除操作在stack2中进行
实现代码:
结果:
(1)入队列:直接压入stack1即可 (2)出队列:如果stack2不为空,把stack2中的栈顶元素直接弹出;否则,把stack1的所 有元素全部弹出压入stack2中,再弹出stack2的栈顶元素。
实现代码:
#include<iostream> #include<stack> using namespace std; template <class T> class CQueue { public: void EnQueue(const T &); //const T &为常量引用型形参。使用const T &传入一个不会在函数内部改变的值, //并且可以避免产生副本 T DeQueue(); private: stack<T> stack1; stack<T> stack2; }; template <class T> void CQueue<T>::EnQueue(const T &data) { stack1.push(data); } template <class T> T CQueue<T>::DeQueue() { if(stack2.empty()) { while(!stack1.empty()) { T &top1 = stack1.top(); stack1.pop(); stack2.push(top1); } } T top2 = stack2.top(); stack2.pop(); return top2; } int main() { CQueue<int> q; q.EnQueue(1); q.EnQueue(2); q.EnQueue(3); cout<<"队列出队:"<<endl;//队列先入先出 cout<<q.DeQueue()<<endl; cout<<q.DeQueue()<<endl; cout<<q.DeQueue()<<endl; return 0; }
结果:
队列出队: 1 2 3 Process returned 0 (0x0) execution time : 1.086 s Press any key to continue.
相关文章推荐
- C#线程队列用法实例分析
- 算法系列15天速成 第九天 队列
- C++基于栈实现铁轨问题
- C语言单链队列的表示与实现实例详解
- C语言栈的表示与实现实例详解
- C语言实现颠倒栈的方法
- 算法系列15天速成 第十天 栈
- mysql 队列 实现并发读
- C#队列Queue用法实例分析
- C#多线程处理多个队列数据的方法
- C语言循环队列的表示与实现实例详解
- C++循环队列实现模型
- C#内置队列类Queue用法实例
- 一看就懂:图解C#中的值类型、引用类型、栈、堆、ref、out
- Array栈方法和队列方法的特点说明
- C#通过链表实现队列的方法
- java数据结构之java实现栈
- C#队列Queue多线程用法实例
- C#数据结构与算法揭秘五 栈和队列
- JAVA 虚拟机 栈