C++模板类实现链式queue

实战经验积累
主要是介绍项目中遇到的一些问题和解决方法
KiranWang

写在前面:本篇介绍用C++的模板类来实现一个动态链表

链表的结构:

 

代码、注释、运行结果

#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;
}

运行结果:

展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 游动-白 设计师: 上身试试
应支付0元
点击重新获取
扫码支付

支付成功即可阅读