/* 题目: 用两个栈实现一个队列。队列声明如下。 */ /* 思路: 将值压入stack1,再从stack1弹出到stack2,则为先进先出。 appendTail时直接压入stack1即可,当stack2没有可用于deleteHead的元素时,将stack1的元素全部压入stack2。 */ template<typename T> class CQueue{ public: CQueue(void) ~CQueue(void); void appendTail(const T& node); T deleteHead(); private: stack<T> stack1; stack<T> stack2; } template<typename T> void CQueue<T>::appendTail(const T& element){ stack1.push(element); } template<typename T> T CQueue<T>::deleteHead(){ if(stack1.empty() && stack2.empty()) throw new exceptions("queue is empty"); if(stack2.size() == 0){ while(!stack1.empty){ T& data = stack1.top(); stack2.push(data);//可以用stack2.push(stack1.pop())吗? stack1.pop(); } } T head = stack2.top(); stack2.pop();
原文地址:https://www.cnblogs.com/buaaZhhx/p/11822993.html
时间: 2024-10-22 04:45:08