您的位置:首页 > 职场人生

面试题-剑指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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: