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?運行效果