用兩個棧實現隊列


題目:用兩個棧實現一個隊列。隊列聲明如下,請實現它的兩個函數 appendTail 和deleteHead, 分別完成在隊列尾部插入結點和在隊列頭部刪除結點的功能。


template <typename T> 
class CQueue
{
public:
CQueue(void);
~CQueue(void);
void appendTail(const T & node);
T deleteHead();


private:
stack<T> stack1;
stack<T> stack2;
};


#include <iostream>
#include <stack>
using namespace std;


template <typename T>
class CQueue
{
private:
	stack<T> stack1;
	stack<T> stack2;


public:
	CQueue(void){}
	~CQueue(void){}

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


	T deleteHead()
	{
		if (isEmpty())
			return NULL;

		T element;
		while (!stack1.empty())
		{
			node = stack1.top();
			stack2.push(element);
			stack1.pop();
		}

		element = stack2.top();
		stack2.pop();
		return node;
	}

	void deleteAndPrintQueue()
	{
		while (!isEmpty())
			cout << deleteHead() << " ";

		cout << endl;
	}


	bool isEmpty()
	{
		return stack1.empty() && stack2.empty();
	}
};




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


int main()
{ 
	CQueue<char> 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');
	return 0;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章