您的位置:首页 > 其它

链式队列

2012-01-04 14:55 99 查看
QueueNode.h

template<typename Type> class LinkQueue;

template<typename Type>class QueueNode{
private:
	Type m_data;
	QueueNode<Type> *m_pnext;
private:
	friend class LinkQueue<Type>;
	QueueNode(const Type item, QueueNode<Type> *next = NULL)
		:m_data(item),m_pnext(next){}
};


LinkQueue.h



#include "QueueNode.h"

template<typename Type> class LinkQueue{
private:
	QueueNode<Type> *m_prear,*m_pfront;
public:
	LinkQueue():m_prear(NULL),m_pfront(NULL){}
	~LinkQueue(){MakeEmpty();}
	void Append(const Type item);
	Type Delete();
	Type GetFront();
	void MakeEmpty();
	void Print();
	bool IsEmpty() const{return m_pfront==NULL;}
};


LinkQueue.cpp



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

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

template<typename Type> Type LinkQueue<Type>::Delete(){
	if(IsEmpty())
	{
		cout<<"There is no element!"<<endl;
		exit(1);
	}
	Type temp = m_pfront->m_data;
	QueueNode<Type> *p = m_pfront;
	m_pfront = m_pfront->m_pnext;
	delete p;
	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> *p = m_pfront;
	while(p != NULL)
	{
		cout<<p->m_data<<' ';
		p = p->m_pnext;
	}
	cout<<endl;
}


Test.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();

	return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: