有关集合队列和栈的转换
来源:互联网 发布:拜占庭容错算法机制 编辑:程序博客网 时间:2024/04/27 07:43
这几天刚好学习了集合Collection等子接口,下面是有关的一个面试题解决方案:
- #include <iostream>
- #include <assert.h>
- #include <queue>
- using namespace std;
- /*两个队列模拟一个堆栈*/
- /*队列A、B
- 入栈:将元素依次压入到非空的队列,第一个元素压倒对列A
- 出栈:把队列A的前n-1个元素倒到队列B,把第n个元素去掉。此时数据在B中,下次操作,则对B操作。
- 栈顶:把队列A的前n-1个元素倒到队列B,把第n个元素作为栈顶*/
- template <typename T>
- class MyStack
- {
- public:
- //入栈,第一个元素进到队列deque1,以后每个元素进到非空的队列
- void push(const T &element) ;
- //出栈,将非空队列的前n-1个元素转移到另一个空的队列,删除非空队列的第n个元素
- void pop() ;
- //栈顶元素,将非空队列的前n-1个元素转移到另一个空的队列,将非空队列的第n个元素返回
- T top();
- //栈是否为空
- bool empty()
- {
- return (q1.empty()&&q2.empty());
- }
- private:
- queue<T> q1;
- queue<T> q2;
- };
- template<typename T> void MyStack<T>::push(const T &element)
- {
- if (q1.empty() && q2.empty())
- {
- q1.push(element);
- }
- else if (!q1.empty() && q2.empty())
- {
- q1.push(element);
- }
- else if (q1.empty() && !q2.empty())
- {
- q2.push(element);
- }
- }
- template<typename T>void MyStack<T>::pop()
- {
- if (!q1.empty())
- {
- int size = q1.size();
- for (int i=0; i<size-1; i++)
- {
- q2.push(q1.front());
- q1.pop();
- }
- q1.pop();
- }
- else
- {
- int size = q2.size();
- for (int i=0; i<size-1; i++)
- {
- q1.push(q2.front());
- q2.pop();
- }
- q2.pop();
- }
- }
- template <typename T>T MyStack<T>::top()
- {
- if (!q1.empty())
- {
- int size = q1.size();
- for (int i=0; i<size-1; i++)
- {
- q2.push(q1.front());
- q1.pop();
- }
- T temp = q1.front();
- q1.pop();
- q2.push(temp);
- return temp;
- }
- else
- {
- int size = q2.size();
- for (int i=0; i<size-1; i++)
- {
- q1.push(q2.front());
- q2.pop();
- }
- T temp = q2.front();
- q2.pop();
- q1.push(temp);
- return temp;
- }
- }
- int main(int argc, char *argv[])
- {
- MyStack<int> my;
- for (int i=0; i<10; i++)
- {
- my.push(i);
- }
- while (!my.empty())
- {
- cout<<my.top()<<" ";
- my.pop();
- }
- cout<<endl;
- return 0;
- }
0 0
- 有关集合队列和栈的转换
- 栈和队列的有关操作
- 栈和队列的有关操作
- 有关栈和队列的编程题
- 二 栈和队列的有关操作
- 栈和队列的有关操作
- 栈和队列的转换
- 栈和队列的“转换”
- Java队列和栈的互相转换
- 栈和队列之间的转换
- 栈和队列的相互转换替代
- 栈和队列的相互转换
- 背包、栈和队列(集合类数据类型的实现)
- 集合和字符串的转换
- 有关数据类型和转换
- 【数据结构】 栈和队列 YTU 2239 十进制与八进制的转换(栈和队列)
- 【搜集】队列和栈的功能相互转换
- YTUOJ之十进制与八进制的转换(栈和队列)
- java反射
- java内存回收机制
- dojo 操作元素
- linux设备驱动第四篇:从如何定位oops的代码行谈驱动调试方法
- springMVC
- 有关集合队列和栈的转换
- FaceBook开源库Fresco
- 笔试题相关
- 微信开发学习日记(二):3个案例
- 【Java】ExecutorService线程池示例
- xml文件的根节点layout_width或者layout_height设置无效果的原因分析
- session.getSession.setAttribute()和session.setAttribute()的再认识;
- Linux常用命令
- wireshark安装出现The NPF driver isn't running. You may have trouble