现在的位置: 首页 > 综合 > 正文

链式队列

2013年10月06日 ⁄ 综合 ⁄ 共 1712字 ⁄ 字号 评论关闭

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

抱歉!评论已关闭.