~使用两个栈实现一个队列(优化版)~

之前有篇博客中已经实现了这道题目,可最近回过头来仔细再看这道题时,才发现当初实现的有够挫的,竟然没有考虑好异常,导致程序有一些的漏洞:

1.空队列删除时会直接使程序崩溃;

2.空队列求队头时时会直接使程序崩溃;

3.空队列求队尾时时会直接使程序崩溃;

 

若是不懂本题的思路,可以查看我的这篇博客,http://blog.csdn.net/manongdeyipiant/article/details/70197256,在这里我就不赘述了!

 

改良版的源代码及测试用例如下:

#include 

template 
class Two_Stack_To_Queue
{
public:
	//插入
	void Push(const T& x)
	{
		input.push(x);
	}

	//删除
	void Pop()
	{
		if(!output.empty())
		{
			output.pop();
		}
		else
		{
			while(!input.empty())
			{
				output.push(input.top());
				input.pop();
			}

			if(!Empty())
			{
				output.pop();
			}
			else
			{
				cout<<"删除时发现该队列为空"< input;
	stack output;
};

void TestTwo_Stack_To_Queue()
{
	Two_Stack_To_Queue q;

	q.Push(1);
	q.Push(2);
	q.Push(3);
	q.Push(4);
	q.Push(5);
	//q.Printf();

	q.Pop();
	q.Pop();
	q.Pop();
	//q.Pop();
	//q.Pop();
	//q.Pop();

	//q.Printf();

	cout<<"Empty: "<


 

你可能感兴趣的:(~使用两个栈实现一个队列(优化版)~)