用两个栈实现队列
2015-10-16 21:26
204 查看
题目:用两个栈实现一个队列。队列的声明如下,请实现它的两个函数appendTail和deleteHead,分别完成在队列的尾部插入节点和在队列的头部删除节点的功能。 解析:队列的特点是先进先出,而栈的特点是后进先出。首先,我们声明两个栈s1和s2,入队列的元素,我们都插入在s1中。出队列的元素,我们都从s2中进行弹出元素。也就是appendTail操作只在s1中进行,deleteHead(int &val)操作只在s2中进行。出队列时可以分为三种情况,(1)两个栈s1和s2都为空,返回false。(2)栈s1为空,而s2不为空,直接从s2中弹出要出队的元素,把出队元素保存在一个变量中。(3)栈s2不为空,直接从s2中弹出元素保存在变量中。#include<iostream> #include<stack> using namespace std; class CQueue { private: stack<int> s1;//入队列时,进入的栈 stack<int> s2;//出队列时,弹出的栈 public: void appendTail(int val)//入队的操作 { s1.push(val); } bool deleteHead(int &val)//出队列操作,出队元素保存在val中 { if(s2.empty() && s1.empty())//判断两个栈是否为空 { return false; } if(!s2.empty())//s2不为空格 { val = s2.top(); s2.pop(); return true; } if(s2.empty() && !s1.empty())//s2为空,s1不为空 { while(!s1.empty()) { s2.push(s1.top()); s1.pop(); } val = s2.top(); s2.pop(); return true; } } }; int main(void) { CQueue q; int val; q.appendTail(3); q.appendTail(4); while(q.deleteHead(val)) { cout<<val<<" "; } cout<<endl; system("pause"); return 0; }输出结果:
3 4
相关文章推荐
- HTTP
- 学习Unity 3d,跟着雨潭老师的脚步前进。。。
- 解决GP服务产生的结果无法自动发布为地图服务的问题
- ADO学习笔记之注入漏洞与参数化查询
- c语言 源代码到可执行程序的过程
- 以Android环境为例的多线程学习笔记———-Callable与Future
- softmaxCost实现
- 【LeetCode】Ugly Number 解题报告
- 第二章、供应源搜寻战略
- android学习
- 【面试题】C语言:使用函数实现两个数的交换
- Android学习之Activity生命周期
- scikit-learn preprocessing模块
- servlet
- gtest入门简介
- ios申请真机调试( xcode 5)详细解析
- 参考了《简单的3步设置,让你的博客园更漂亮!》,让博客清爽、美观,心情美美哒(>_<)
- sharepreference使用方法
- [POJ2456]Aggressive cows
- 一、门级结构描述