面试题-剑指offer-两个栈实现队列
2018-01-29 22:34
441 查看
#include <iostream>
#include <stack>
#include <exception>
using namespace std;
//模板类可以不局限一种数据类型
template <typename T>
class MyQueue
{
public:
MyQueue();//默认构造
~MyQueue();//默认析构
void appendTail(const T& node);//栈实现队列入队
T deleteHead();//栈实现队列出队
private:
stack<T> stack1;//栈1
stack<T> stack2;//栈2
};
template <typename T>
MyQueue<T>::MyQueue()
{
}
template <typename T>
MyQueue<T>::~MyQueue()
{
}
template <typename T>
void MyQueue<T>::appendTail(const T& node)
{
stack1.push(node);
}
template <typename T>
T MyQueue<T>::deleteHead()
{
if(stack2.size()<=0)//如果栈2为空
{
while(stack1.size()>0)//如果栈1有值
{
T& data = stack1.top();//取栈顶元素
stack2.push(data);//栈顶元素入栈2
stack1.pop();//删除该元素弹栈
}
}
if(stack2.size()==0)//判断栈空,抛出异常
{
throw "队列已空";
}
T head = stack2.top();//取栈2顶元素->出队
stack2.pop();//删除该元素
return head;
}
int main()
{
MyQueue<char> mq;
mq.appendTail('A');
mq.appendTail('B');
mq.appendTail('C');
mq.appendTail('D');
try
{
cout << "pop : " << mq.deleteHead() << endl;
cout << "pop : " << mq.deleteHead() << endl;
cout << "pop : " << mq.deleteHead() << endl;
cout << "pop : " << mq.deleteHead() << endl;
cout << "pop : " << mq.deleteHead() << endl;
}
catch (const char *ptr)
{
printf("%s\n", ptr);
}
return 0;
}
相关文章推荐
- 剑指offer 面试题7 两个栈实现队列
- 【剑指offer】面试题7:两个栈实现队列
- 剑指Offer-【面试题07:两个栈实现队列】
- [剑指offer]面试题7:用两个栈实现队列
- 剑指Offer面试题7用两个栈实现队列
- 剑指Offer面试题9:用两个栈实现队列
- 【剑指offer】面试题:两个队列实现栈
- 【剑指offer】面试题7:用两个栈实现队列
- 剑指Offer面试题7(Java版):用两个栈实现队列与用两个队列实现栈
- 剑指offer面试题[7]-用两个栈实现队列
- 剑指offer面试题java实现之题7:用两个栈模拟一个队列的入队和出队操作
- 剑指offer--面试题7:用两个栈实现队列--Java实现
- 剑指offer面试题7——用两个栈实现队列
- 剑指offer-面试题07-用两个栈实现队列
- 剑指Offer之面试题7:用两个栈实现队列
- 剑指offer-->面试题7 用两个栈实现队列
- 【面试题】剑指Offer-7-两个栈实现一个队列
- 剑指offer---面试题7 用两个栈实现队列
- 【剑指offer】面试题7:用两个栈实现队列
- 剑指offer之面试题7:用两个栈实现队列