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