栈与队列
2015-07-26 22:21
337 查看
1.用2个栈实现一个队列(剑指offer——面试题7)
思想:往队尾添加结点的时候,就是把当前结点压入stack1中。删除队首的结点时,首先判断stack2是否为空,如果stack2为空,则把stack1中的所有结点都压入到stack2中。如果stack2仍然为空,说明队列为空。删除stack2中的栈顶结点。
2.用2个队列实现一个栈
思想:第一个结点可以随意往任意空栈中添加。接下来往栈中添加结点的时候就是把结点压入非空的那个栈的末尾。删除结点时,依次删除非空队列中的结点,并且压入到另一个队列中,直到当前队列剩下最后一个结点,将其删除。
思想:往队尾添加结点的时候,就是把当前结点压入stack1中。删除队首的结点时,首先判断stack2是否为空,如果stack2为空,则把stack1中的所有结点都压入到stack2中。如果stack2仍然为空,说明队列为空。删除stack2中的栈顶结点。
#include<stack> #include<queue> #include<iostream> using namespace std; //用2个栈实现队列 template<typename T> class CQueue{ public: CQueue(void); ~CQueue(void); void appendTail(const T& node); T deleteHead(); private: stack<T> stack1; stack<T> stack2; }; template<typename T> void CQueue<T>::appendTail(const T& element) { stack1.push(element); } template<typename T> T CQueue<T>::deleteHead() { if(stack2.size()<=0) { while(stack1.size()>0) { T & data=stack1.top(); stack1.pop(); stack2.push(data); } } if(stack2.size()==0) throw new exception("queue is empty"); T head=stack2.top(); stack2.pop(); return head; }
2.用2个队列实现一个栈
思想:第一个结点可以随意往任意空栈中添加。接下来往栈中添加结点的时候就是把结点压入非空的那个栈的末尾。删除结点时,依次删除非空队列中的结点,并且压入到另一个队列中,直到当前队列剩下最后一个结点,将其删除。
相关文章推荐
- [leedcode 142] Linked List Cycle II
- Android(java)学习笔记129:Tab标签的使用
- 最长公共子序列
- 控件与组件
- android intent调用隐式调用系统
- DICOM:dcm4che工具包如何压缩dcm文件探讨(前篇)
- jQuery的.bind()、.live()和.delegate()之间区别
- cacti0.8.8b的安装
- hdu 2159 FATE
- openwrt下让telnetl与ssh(dropbear)共存
- Android Studio推荐几个非常有用的工具
- UICollectionView详解5:瀑布流
- iOS UI异步更新:dispatch_async 与 dispatch_get_global_queue 的使用方法
- unity之mipmap
- IP高清模组将为行业带来新动力
- 2.7-快捷键使用
- 其他 - 报到证
- Java 【11】this学习,浅谈this原理详解、this语句
- 如何测试一个网页登陆界面
- 策略模式