使用两个栈实现一个队列
2016-06-11 18:53
357 查看
面试题:用两个栈(Stack)实现一个队列(Queue)
思路:
1、入队时,将元素压入s1。
2、出队时,判断s2是否为空,如不为空,则直接弹出顶元素;如为空,则将s1的元素逐个“倒入”s2,把最后一个元素弹出并出队。
这个思路,避免了反复“倒”栈,仅在需要时才“倒”一次。
650) this.width=650;" src="http://s5.51cto.com/wyfs02/M01/7F/01/wKioL1cPpw_gNRQzAAAyBsdXVjE289.png" title="无标题.png" alt="wKioL1cPpw_gNRQzAAAyBsdXVjE289.png" />
具体实现如下:
思路:
1、入队时,将元素压入s1。
2、出队时,判断s2是否为空,如不为空,则直接弹出顶元素;如为空,则将s1的元素逐个“倒入”s2,把最后一个元素弹出并出队。
这个思路,避免了反复“倒”栈,仅在需要时才“倒”一次。
650) this.width=650;" src="http://s5.51cto.com/wyfs02/M01/7F/01/wKioL1cPpw_gNRQzAAAyBsdXVjE289.png" title="无标题.png" alt="wKioL1cPpw_gNRQzAAAyBsdXVjE289.png" />
具体实现如下:
测试用例如下: void Test2() { //Queue<int> q1; //q1.s1.push(3); //q1.s2.push(4); //q1.s2.push(5); //q1.Push(2); //q1.Push(1); //q1.PrintQueue(); ////q1.Pop(); ////q1.Pop(); ////q1.Pop(); ////q1.Pop(); ////q1.Pop(); ////q1.Pop(); ////q1.PrintQueue(); Queue<string> q1; q1.s1.push("lllll"); q1.s2.push("yyyyy"); q1.s2.push("fffff"); q1.Push("xxxxx"); q1.Push("yyyyy"); q1.PrintQueue(); cout << "empty: " << q1.Empty() << endl; cout << "size: " << q1.Size() << endl; cout << "front: " << q1.Front() << endl; cout << "back: " << q1.Back() << endl; }本文出自 “Scen” 博客,请务必保留此出处http://10741357.blog.51cto.com/10731357/1763949
相关文章推荐
- 使用两个队列实现一个栈
- 实现一个栈,要求实现Push(入栈)、Pop(出栈)、Min(返回最小值的操作)的时间复杂度为O(1)
- 稀疏矩阵的压缩存储和转置
- 递归实现广义表
- 递归与非递归实现二叉树
- 二叉树的前序、中序和后序线索化
- 堆的实现(堆的建立及push、pop元素)
- 【适配器模式】实现优先级队列
- 堆排序--采用快速排序(利用大堆实现升序,小堆实现降序)
- 哈希冲突的处理【闭散列方法-线性探测和二次探测】
- 哈希桶处理哈希冲突
- 位图(BitMap)&& 布隆过滤器(BloomFilter)
- 【数据结构】常见的7种比较排序算法2
- 【数据结构】非比较排序算法(实现计数排序和基数排序)
- 【Linux】文件查找:find
- 【Linux】vim的配置
- 【Linus】配置gcc、g++和gdb
- 【Linux】make的工作原理和makefile文件
- 【海量数据处理】N个数中找出最大的前K个数
- 【数据结构】常见的7种比较排序算法1