剑指offer面试题7
题目:用两个栈实现一个队列。队列的声明如下,请实现它的两个函数appendTail和deleteHead,分别完成在队列尾部插入结点和在队列头部删除结点的功能。
template <typename Type>
class CQueue
{
public:
void appendTail(const Type& node);
Type deleteHead();
private:
stack<Type> stack1;//入队
stack<Type> stack2;//将stack1的元素全部入到stack2中,再出
};
template<typename Type>
void CQueue<Type>::appendTail(const Type& node)
{
stack1.push(node);
}
template<typename Type>
Type CQueue<Type>::deleteHead()
{
if(stack2.size() <=0 )
{
while(!stack1.empty())
{
Type& tmp = stack1.top();
stack1.pop();
stack2.push(tmp);
}
}
if(stack2.size() == 0)
throw new exception("queue is empty");
Type top = stack2.top();
stack2.pop();
return top;
}
int main()
{
CQueue<int> q;
for(int i=0;i<10;i++)
q.appendTail(i);
for(int i=0;i<10;i++)
{
int tmp = q.deleteHead();
cout<<tmp<<ends;
}
cout<<endl;
return 0;
}