栈是先进后出的,队列是先进先出的。
栈顶在上面,栈是向上生长的,每次数据操作是压栈,最后的数据元素指向栈顶。
实例:用两个栈实现队列
题目:用两个栈实现一个队列,队列的声明如下,请实现他的连个函数,分别完成在队列尾部插入结点和在队列头部删除结点的功能。
1 template<typename T>class CQueue 2 { 3 public: 4 CQueue(void); 5 ~CQueue(void); 6 void appendTail(const T& node); 7 T deleteHead(); 8 private: 9 stack<T>stack1 ; 10 stack<T>stack2; 11 }; 12 template<typename T> 13 void CQueue<T>::appendTail(const T& node) 14 { 15 stack1.push(node); 16 } 17 template<typename T> 18 T CQueue<T>::deleteHead() 19 { 20 if (stack2.size()<=0) 21 { 22 while (stack1.size()>0) 23 { 24 T tmp = stack1.top(); 25 stack2.push(tmp); 26 stack1.pop(); 27 } 28 } 29 if (stack2.size()==0) 30 { 31 throw std::exception("Empty Queue."); 32 } 33 T head = stack2.top(); 34 stack2.pop(); 35 return head; 36 }
思路提示:将一个栈中的结点依次出栈,然后压入到另一个栈中,构成队列,如果向删除头部结点,则只需要将新栈中栈顶出栈即可。
时间: 2024-10-09 04:20:52