面试题7:用两个队列实现栈
来源:互联网 发布:手机淘宝首页多宽 编辑:程序博客网 时间:2024/05/15 05:48
题目:用两个队列实现一个栈。实现两个函数push和pop,完成从栈顶插入和删除结点的功能。
思路:
(1)入栈:总是插入到非空队列中
(2)出栈:将非空队列中的前n-1个元素依次出队列push进空队列中,然后将最后一个元素出队列,完成出栈操作。
C++代码:
#include "stdafx.h"#include <iostream>#include <deque>#include <assert.h>using namespace std;// 两个队列实现一个栈template<class T>class CStack{public:CStack() {}~CStack() {}void PushData(const T& element);void PopData(T& element);private:deque<T> m_queue1;deque<T> m_queue2;};template<class T> void CStack<T>::PushData(const T& element){if (m_queue1.size() > 0){m_queue1.push_back(element);}else if (m_queue2.size() > 0){m_queue2.push_back(element);}else{m_queue1.push_back(element);}}template<class T>void CStack<T>::PopData(T& element){if (m_queue1.size() == 0){while (m_queue2.size() > 1){T& data = m_queue2.front();m_queue2.pop_front();m_queue1.push_back(data);}assert(m_queue2.size() == 1); //确保队列2内有一个元素element = m_queue2.front();m_queue2.pop_front();}else if (m_queue2.size() == 0){while (m_queue1.size() > 1){T& data = m_queue1.front();m_queue1.pop_front();m_queue2.push_back(data);}assert(m_queue1.size() == 1); //确保队列1内有一个元素element = m_queue1.front();m_queue1.pop_front();}}int main(){CStack<int> myStack;int nPopData = 0;myStack.PushData(1);myStack.PushData(2);myStack.PushData(3);myStack.PopData(nPopData);cout << nPopData << endl;myStack.PushData(4);myStack.PopData(nPopData);cout << nPopData << endl;system("pause");return 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:用两个栈实现队列
- 面试题6:用两个栈实现队列
- _stdcall与_cdel
- HDU 1407 测试你是否和LTC水平一样高
- SSL-用Keytool和OpenSSL生成和签发数字证书
- SSL-用OpenSSL命令行生成证书文件
- 面试题7:用两个队列实现栈
- 这11道题据说要智商200的人才能全解出来
- Expdp For Metadata Is Slow In 11.2.0.3 With Partitioned Objects [ID 1466040.1]
- 在.NET使用JSON作为数据交换格式(转http://blog.csdn.net/zhoufoxcn/article/details/6254657)
- YUV数据占用内存大小
- 程序员的八个级别
- 面试题20:栈的压入、弹出序列
- 黑马程序员--Java基础--异常
- 编程调试和诊断的五大规则