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