用两个栈实现队列

题目:
用两个栈实现一个队列。队列的声明如下,请实现它的两个函数appendTail和deleteHead,分别完成在队列尾部插入结点和在队列头部删除结点的功能。

思路:
stack1和stack2是两口井,stack1是一直保持着有水(有元素)的状态,而stack2是一个temp量,stack1导入stack2,stack1的井底的的元素就到了stack2井顶

template  void CQueue::appendTail(const T& element)
{
	stack1.push(element);
}

template T CQueue::deleteHead()
{
	if (stack1.size() == 0)
		throw new exception("queue is empty");

	while(stack1.size()>0)//从stack1倒入stack2
	{
		T temp = stack1.top();
		stack1.pop();
		stack2.push(temp);
	}
	T res = stack2.top();
	stack2.pop();

	while(stack2.size()>0)//从stack2倒入stack1
	{
		T temp = stack2.top();
		stack2.pop();
		stack1.push(temp);
	}
	return res;
}

完整代码包含测试代码,测试代码参考原书:

#include 
#include 

using namespace std;

template  class CQueue
{
public:
	CQueue(void);
	~CQueue(void);

	// 在队列末尾添加一个结点
	void appendTail(const T& node);

	// 删除队列的头结点
	T deleteHead();

private:
	stack stack1;
	stack stack2;
};

template  CQueue::CQueue(void)
{

}

template  CQueue::~CQueue(void)
{

}

template  void CQueue::appendTail(const T& element)
{
	stack1.push(element);
}

template T CQueue::deleteHead()
{
	if (stack1.size() == 0)
		throw new exception("queue is empty");

	while(stack1.size()>0)//从stack1倒入stack2
	{
		T temp = stack1.top();
		stack1.pop();
		stack2.push(temp);
	}
	T res = stack2.top();
	stack2.pop();

	while(stack2.size()>0)//从stack2倒入stack1
	{
		T temp = stack2.top();
		stack2.pop();
		stack1.push(temp);
	}
	return res;
}

// ====================测试代码====================
void Test(char actual, char expected)
{
	if (actual == expected)
		printf("Test passed.\n");
	else
		printf("Test failed.\n");
}

int main(int argc, char* argv[])
{
	CQueue queue;

	queue.appendTail('a');
	queue.appendTail('b');
	queue.appendTail('c');

	char head = queue.deleteHead();
	Test(head, 'a');

	head = queue.deleteHead();
	Test(head, 'b');

	queue.appendTail('d');
	head = queue.deleteHead();
	Test(head, 'c');

	queue.appendTail('e');
	head = queue.deleteHead();
	Test(head, 'd');

	head = queue.deleteHead();
	Test(head, 'e');

	system("pause");
}

你可能感兴趣的:(剑指offer)