~使用两个队列实现一个栈~
来源:互联网 发布:java二叉树非递归 编辑:程序博客网 时间:2024/05/22 09:50
栈和队列最常考的面试题之一: 使用两个队列实现一个栈
主要思路:
1)建立两个队列input与output,其中input用于入栈,output用于出栈;
2)当元素要入栈时,直接当元素压入input中;
3)当元素要出栈时,先判断output中是否有元素。若是有,可以直接将output中的栈顶元素出队列;若是没有,则先将input中的元素入到output中,再判断栈是否为空,若不为空,将output的元素除队尾元素外入到input中,再将output中的栈顶元素出队列;
4)判断队列是否为空,依次判断input与output是否为空,若有其中一个栈不为空,则队列就不为空;
5)求栈顶元素,首先判断栈是否为空,若不为空,将input中的元素入到output中,若output不为空,则打印output队尾元素;
6)求队列的大小,将队列input与output的大小相加即可。
完整的源代码及测试用例如下:
#include <queue>template <class T>class Two_Queue_To_Stack{public://插入void Push(const T& x){input.push(x);}//删除void Pop(){if(!output.empty()){output.pop();}else{while(!input.empty()){output.push(input.front());input.pop();}if(!Empty()){while(output.size() - 1){input.push(output.front());output.pop();}output.pop();}else{cout<<"删除时发现该队列为空"<<endl;}}}//判空bool Empty(){if(!(input.empty() && output.empty())){return false;}return true;}//栈顶void Top()//T& Top(){if(!Empty()){while(!input.empty()){output.push(input.front());input.pop();}if(!output.empty()){//return output.top();cout<<"栈顶: "<<output.back()<<endl;}}else{cout<<"求栈顶时发现该队列为空"<<endl;}}//大小size_t Size(){return input.size() + output.size();}//打印void Printf(){if(!Empty()){cout<<Top()<<" ";Pop();}cout<<endl;}protected:queue<T> input;queue<T> output;};void TestTwo_Queue_To_Stack(){Two_Queue_To_Stack<int> q;q.Push(1);q.Push(2);q.Push(3);q.Push(4);q.Push(5);//q.Printf();q.Pop();q.Pop();q.Pop();//q.Pop();//q.Pop();//q.Pop();//q.Printf();cout<<"Empty: "<<q.Empty()<<endl;//cout<<"Top: "<<q.Top()<<endl;q.Top();cout<<"Size: "<<q.Size()<<endl;}
0 0
- 栈&队列--使用两个栈实现一个队列+使用两个队列实现一个栈
- 使用两个队列实现一个栈
- 使用两个队列实现一个栈
- 使用两个栈实现一个队列
- 使用两个栈实现一个队列
- 使用两个队列实现一个栈
- 数据结构-使用两个栈实现一个队列
- 使用两个队列实现一个栈
- 使用两个栈实现一个队列
- 使用两个队列实现一个栈
- 使用两个栈实现一个队列
- 使用两个栈实现一个队列
- 使用两个栈实现一个队列
- ~使用两个栈实现一个队列~
- ~使用两个队列实现一个栈~
- 使用两个栈实现一个队列
- 使用两个队列实现一个栈
- 使用两个栈实现一个队列
- 常用排序算法代码整理
- c语言与文件处理基础
- 刷新和加载更多
- javaSE_8系列博客——Java语言的特性(二)--高级语言的基础知识(4)-- 变量和数组
- go语言测试test
- ~使用两个队列实现一个栈~
- [smoj 1022]位置
- html 中 form 的应用
- Attacks on TCP/IP Protocols (Task3) SYN Flooding Attack
- java基础******银行存款
- Java jdk 1.7安装
- (分片连接池)客户端分片的Jedis分布式(Sharding/shared一致性哈希)(redis2.8)
- liferay中整合vue--打包注意事项
- vuikan develop resource