面试题7_使用两个栈实现一个队列的功能
//面试题7
//使用两个栈实现一个队列的功能。
//队列的声明如下:实现它的两个函数:appendTail和deleteHead,
//也即分别实现在队列的头部添加一个元素、在队列的末尾删除一个元素。
#include<iostream>
#include<stack>
#include<queue>
#include<exception>
using namespace std;
template<typename T>
class MyQueue
{
public:
//MyQueue(void);
//~MyQueue(void);
//在队列的头部添加一个元素,使用栈1
void appendTail(T temp)
{
stack1.push(temp);
}
//在队列的末尾删除一个元素,使用栈2
T deleteHead()
{
if(stack2.empty()) //当栈2为空时
{
while(! stack1.empty()) //同时,栈1不为空时,将栈1里的元素全部装入栈2
{
T temp=stack1.top();
stack1.pop();
stack2.push(temp);
}
}
if(stack2.empty())
{
//throw new exception("queue is empty.");
return 0;
}
T deleteMember=stack2.top();
stack2.pop();
return deleteMember;
}
//插入队列中的元素个数
void PrintQueue()
{
cout<<stack1.size()<<endl;
cout<<stack2.size()<<endl;
}
private:
stack<T> stack1;
stack<T> stack2;
};
int main(void)
{
MyQueue<int> object;
//int num[]={1,2,3,4,5};
//for(int i=0; i<5; ++i)
// object.appendTail(num[i]);
object.appendTail(122);
object.appendTail(123);
object.PrintQueue();
int deletemember=object.deleteHead();
cout<<deletemember<<endl;
object.PrintQueue();
system("pause");
return 0;
}