http://blog.csdn.net/itcastcpp/article/details/39271691
今天,我们一起用C++写一个链对,具体如下所示。
LinkQueue.h具体内容如下:
[cpp] view plain copy
- #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;
- }
[cpp] view plain copy
- 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;
- };
[cpp] view plain copy
- #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 运行效果