题目:给出队列声明,要求实现AppendTail和DeleteHead函数。
template <typename T>
class CQueue
{
public:
void AppendTail(const T& element);
T DeleteHead();
private:
stack<T> stack1;
stack<T> stack2;
};
思路:要用两个先进后出的栈实现先进先出的队列。压栈总是压入stack1,要获得队列头时:如果stack2为空,则把stack1依次弹出栈并压入stack2,取stack2栈顶元素;如果stack2不为空,则直接取stack2栈顶元素。

1 #include <iostream> 2 #include <stack> 3 using namespace std; 4 5 template <typename T> 6 class CQueue 7 { 8 public: 9 void AppendTail(const T& element); 10 T DeleteHead(); 11 private: 12 stack<T> stack1; 13 stack<T> stack2; 14 }; 15 16 template<typename T> void CQueue<T>::AppendTail(const T& element) 17 { 18 stack1.push(element); 19 } 20 21 template<typename T> T CQueue<T>::DeleteHead() 22 { 23 T temp; 24 if(!stack2.empty()) 25 { 26 temp = stack2.top(); 27 stack2.pop(); 28 } 29 else 30 { 31 if(stack1.empty()) 32 { 33 cout<<"No element left!"<<endl; 34 //return; 35 } 36 else 37 { 38 while(!stack1.empty()) 39 { 40 temp = stack1.top(); 41 stack1.pop(); 42 stack2.push(temp); 43 } 44 temp = stack2.top(); 45 stack2.pop(); 46 } 47 } 48 return temp; 49 } 50 51 52 53 int main() 54 { 55 CQueue<int> my_queue; 56 int n,val; 57 cout<<"1 for Append"<<endl<<"2 for DeleteHead"<<endl; 58 while(scanf("%d",&n)!=0) 59 { 60 if(n == 1) 61 { 62 scanf("%d",&val); 63 my_queue.AppendTail(val); 64 } 65 else if(n == 2) 66 { 67 val = my_queue.DeleteHead(); 68 cout<<"The head of Queue:"<<val<<endl; 69 } 70 else 71 cout<<"Illegal n!"<<endl; 72 } 73 return 0; 74 }