面试题7:用两个栈实现队列
来源:互联网 发布:java 短链接生成器 编辑:程序博客网 时间:2024/04/29 04:38
1.题目:用两个栈实现一个队列,完成在队列的尾部和插入节点和在头部删除节点的功能。
数据结构如下:
template <typename T> class CQueue{public:CQueue(void);~CQueue(void);// add the node to the tail of the queuevoid appendTail(const T& node);// delete the node from the head of the queueT deleteHead();private:stack<T> stack1;stack<T> stack2;};
分析:
栈的特性是先进后出,而队列的特性是先进先出。用两个栈来实现队列,肯定涉及到两个栈之间的数据的互相的进栈和出栈,例如在队列进行添加元素时,可以直接往stack1中压栈,此时先添加的元素在栈的底端,在出队列的时候就不能直接出栈了,要先将stack1中的元素弹出,然后依次压入栈stack2中,在出队列的时候顺序就是对的。如图所示:
源码:
#include<iostream>#include<stack>using namespace std;template <typename T> class CQueue{public:CQueue(void);~CQueue(void);// add the node to the tail of the queuevoid appendTail(const T& node);// delete the node from the head of the queueT deleteHead();private:stack<T> stack1;stack<T> stack2;};template <typename T> CQueue<T>::CQueue(void){}template <typename T> CQueue<T>::~CQueue(void){}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;}int main(){CQueue<char> queue;queue.appendTail('a');queue.appendTail('b');queue.appendTail('c');char head = queue.deleteHead();cout << "head is : " << head << endl;system("PAUSE");return 0;}
0 0
- 面试题7 两个栈实现队列
- 剑指offer-->面试题7 用两个栈实现队列
- 面试题7:用两个栈实现队列
- 面试题7:用两个队列实现栈
- 面试题7 用两个栈实现队列
- 【剑指offer】面试题7:用两个栈实现队列
- 剑指Offer:面试题7 用两个栈实现队列
- 面试题7:用两个栈实现队列
- 面试题7-用两个栈实现队列
- 面试题7 用两个栈实现队列
- 面试题7:用两个栈实现队列
- 面试题7 用两个栈实现队列
- 《剑指Offer》面试题7:用两个栈实现队列
- 面试题7:用两个栈实现队列
- 【剑指offer】 面试题7: 用两个栈实现队列
- 面试题7,用两个栈实现队列
- 面试题7:用两个栈实现队列
- 【剑指offer】面试题7:用两个栈实现队列
- android自定义View绘制几何图形
- git初级常用命令
- LaTeX 科技排版 课程
- 使用Jacob自动替换书签内容
- 牛腩新闻发布系统总结
- 面试题7:用两个栈实现队列
- HDU 5691 --tsp变型
- Qt中利用定时器QTimer准实时显示当前日期和时间
- Android 自定义View引用xml布局
- android ,广播接受者。调用服务内部方法
- python的with...as...用法
- CTEX - 在线文档 - TeX/LaTeX 常用宏包
- NodeJs——(4)和模块
- Shell特殊变量:Shell $0, $#, $*, $@, $?, $$和命令行参数