剑指offer-面试题9-用两个栈实现队列-栈和队列

/*
题目:
	用两个栈实现一个队列。队列声明如下。
*/
/*
思路:
	将值压入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