題目:用兩個棧實現一個隊列。隊列的聲明如下,請實現它的兩個函數appendTail和deleteHead,分別完成在隊列尾部插入節點和在隊列頭部刪除節點的功能。
思想很簡單,直接上代碼:
#include<iostream>
#include<stack>
#include<exception>
using namespace std;
template<typename T> class Cqueue{
public:
Cqueue();
~Cqueue();
void appendTail(const T& element);
T deleteHead();
private:
stack<T> stack1;
stack<T> stack2;
};
template<typename T> Cqueue<T>::Cqueue(){}
template<typename T> Cqueue<T>::~Cqueue(){}
template<typename T> void Cqueue<T>::appendTail(const T& element)
{
stack1.push(element);
}
template<typename T> T Cqueue<T>::deleteHead()
{
if(stack2.size()<=0)
{
while(stack1.size()>0)
{
T& data=stack1.top();
stack1.pop();
stack2.push(data);
}
}
if(stack2.size()==0)
{
throw new exception("queue is empty");
}
T head=stack2.top();
stack2.pop();
return head;
}
int main()
{
Cqueue<int> queue;
queue.appendTail(1);
queue.appendTail(2);
queue.appendTail(3);
queue.appendTail(8);
int Head=queue.deleteHead();
cout<<Head<<endl;
Head=queue.deleteHead();
cout<<Head<<endl;
Head=queue.deleteHead();
cout<<Head<<endl;
Head=queue.deleteHead();
cout<<Head<<endl;
queue.appendTail(9);
Head=queue.deleteHead();
cout<<Head<<endl;
system("pause");
return 0;
}