C++ template class implements chained queue

Written in front: This article introduces the use of C++ template classes to implement a dynamic linked list

The structure of the linked list:

 

Code, comments, running results

#include <iostream>
using namespace std;


template <class Object>
class Queue
{
public:
	Queue();			//构造函数
	~Queue();		    //析构函数

	bool isEmpty();		//判断queue是否为空

	void makeEmpty();	//清空queue

	Object getFront();  //获取队首内容
	void enqueue(const Object &obj);  //进入队列尾部
	Object dequeue();   //从头部删除一个node

private:
	struct linkNode
	{
		Object element;
		linkNode *next;

		linkNode(Object ele, linkNode *p = NULL) :element(ele), next(p) {};

	};

	linkNode *front;
	linkNode *back;

};

template <class Object>
Queue<Object>::Queue()
{
	front = back = NULL;
}

template <class Object>
Queue<Object>::~Queue()
{
	makeEmpty();
}

template <class Object>
bool Queue<Object>::isEmpty()
{
	return front == NULL;

}

template <class Object>
void Queue<Object>::enqueue(const Object &obj)
{
	if (isEmpty())
	{
		front = back = new linkNode(obj);
	}
	else
	{
		back = back->next = new linkNode(obj);
	}
		
}

template<class Object>
Object Queue<Object>::dequeue()
{
	if (isEmpty()) throw "queue is empty";

	Object obj = getFront();

	linkNode *oldFront = front;

	front = front->next;

	delete oldFront;

	return obj;

}

template<class Object>
Object Queue<Object>::getFront()
{
	if (isEmpty()) throw "queue is empty";

	return front->element;
}
template <class Object>
void  Queue<Object>::makeEmpty()
{
	while (!isEmpty())
		dequeue();
}


int main()
{
	Queue<char> myQ1;
	Queue<int> myQ2;

	myQ1.enqueue('A');
	myQ1.enqueue('B');
	myQ1.enqueue('C');
	cout << myQ1.getFront() << endl;
	myQ1.dequeue();
	cout << myQ1.getFront() << endl;

	for (int i = 0; i < 8; i++)
		myQ2.enqueue(i);
		
	cout << endl << endl;
	for (int i = 0; i < 8; i++)
	{
		cout << myQ2.getFront() << endl;
		myQ2.dequeue();
	}

	return 0;
}

operation result:

Guess you like

Origin blog.csdn.net/weixin_40204595/article/details/106249658