链队

    今天,我们一起用C++写一个链对,具体如下所示。

LinkQueue.h具体内容如下:

#include "QueueNode.h"
template<typename Type> class LinkQueue{
public:
	LinkQueue() :m_prear(NULL), m_pfront(NULL){}
	~LinkQueue(){
		MakeEmpty();
	}
	void Append(const Type item);   //insert data
	Type Delete();                  //delete data
	Type GetFront();                //get data
	void MakeEmpty();               //make the queue empty
	void Print();                   //print the queue

	bool IsEmpty() const{
		return m_pfront == NULL;
	}

private:
	QueueNode<Type> *m_prear, *m_pfront;
};

template<typename Type> void LinkQueue<Type>::MakeEmpty(){
	QueueNode<Type> *pdel;
	while (m_pfront){
		pdel = m_pfront;
		m_pfront = m_pfront->m_pnext;
		delete pdel;
	}
}

template<typename Type> void LinkQueue<Type>::Append(const Type item){
	if (m_pfront == NULL){
		m_pfront = m_prear = new QueueNode<Type>(item);
	}
	else{
		m_prear = m_prear->m_pnext = new QueueNode<Type>(item);
	}
}

template<typename Type> Type LinkQueue<Type>::Delete(){
	if (IsEmpty()){
		cout << "There is no element!" << endl;
		exit(1);
	}
	QueueNode<Type> *pdel = m_pfront;
	Type temp = m_pfront->m_data;
	m_pfront = m_pfront->m_pnext;
	delete pdel;
	return temp;
}

template<typename Type> Type LinkQueue<Type>::GetFront(){
	if (IsEmpty()){
		cout << "There is no element!" << endl;
		exit(1);
	}
	return m_pfront->m_data;
}

template<typename Type> void LinkQueue<Type>::Print(){
	QueueNode<Type> *pmove = m_pfront;
	cout << "front";
	while (pmove){
		cout << "--->" << pmove->m_data;
		pmove = pmove->m_pnext;
	}
	cout << "--->rear" << endl << endl << endl;
}
QueueNode.h具体内容如下:

template<typename Type> class LinkQueue;

template<typename Type> 
class QueueNode
{
private:
	friend class LinkQueue < Type > ;
	QueueNode(const Type item, QueueNode<Type> *next = NULL)
		:m_data(item), m_pnext(next){}
private:
	Type m_data;
	QueueNode<Type> *m_pnext;
};
main.cpp具体内容如下:

#include <iostream>
using namespace std;
#include "LinkQueue.h"
int main(){
	LinkQueue<int> queue;
	int init[10] = { 1, 3, 6, 8, 9, 2, 0, 5, 4, 7 };
	for (int i = 0; i < 10; i++){
		queue.Append(init[i]);
	}
	queue.Print();
	queue.Delete();
	queue.Print();
	cout << queue.GetFront() << endl;
	queue.Print();
	queue.MakeEmpty();
	queue.Print();
	queue.Delete();
	cin.get();
	return 0;
}
运行效果如图1所示:

图1 运行效果

原文地址:https://www.cnblogs.com/new0801/p/6176918.html