今天,我们一起用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 运行效果