码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2019-11-08 20:50:29      阅读:100      评论:0      收藏:0      [点我收藏+]

标签:用两个   栈实现队列   oid   一个   面试题   head   两个栈实现队列   amp   nbsp   

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

   

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

标签:用两个   栈实现队列   oid   一个   面试题   head   两个栈实现队列   amp   nbsp   

原文地址:https://www.cnblogs.com/buaaZhhx/p/11822993.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!