《剑指offer》-- (3)用两个栈实现队列

时间:2021-07-11 14:30:57

题目描述:

用两个栈实现一个队列。请实现它的两个函数在队列尾部插入结点和在队列头部删除结点的功能。

代码:

//队列申明
template<typename T>
class CQueue
{
public:
	CQueue(){}
	~CQueue(){}

	void MyPush(T value);
	T MyFront();
private:
	stack<T> stack1;
	stack<T> stack2;
};

//尾插
template<typename T>
void CQueue<T>::MyPush(T value)
{
	stack1.push(value);
}
//头删
template<typename T>
T CQueue<T>::MyFront()
{
	T data;
	if(!stack2.empty())
	{
		data=stack2.top();
		stack2.pop();
		return data;
	}

	else if(!stack1.empty())
	{
		while(stack1.size()>0)
		{
			data=stack1.top();
			stack1.pop();
			stack2.push(data);
		}
		data=stack2.top();
		stack2.pop();
		return data;
	}

	else
		cout<<"queue front error!"<<endl;
	
}