生活随笔
收集整理的這篇文章主要介紹了
数据结构之单链表——C++模板类实现
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
轉(zhuǎn)自:http://blog.csdn.net/Mrx_Nh/article/details/60471647
單鏈表定義
[cpp]?view plaincopy
#ifndef?SinglyLinkedListEDLIST_H_INCLUDED?? #define?SinglyLinkedListEDLIST_H_INCLUDED?? #include?<bits/stdc++.h>?? using?namespace?std;?? ?? template<class?T>?? class?LinkNode?{?? public:?? ????????LinkNode(LinkNode<T>*?ptr?=?NULL)?{cout?<<?"Constructing?a?LinkNode?by?default?way!"?<<?endl;?link?=?ptr;}?? ????????LinkNode(const?T&?item,?LinkNode<T>*?ptr?=?NULL)?{cout?<<?"Constructing?a?LinkNode?by?defined?way!"?<<?endl;?data?=?item,?link?=?ptr;}?? ????????~LinkNode()?{cout?<<?"Desctructing?a?LineNode!"?<<?endl;?delete?link;}?? ????????T?data;?????????????????????? ????????LinkNode<T>?*link;??????????? };?? ?? ?? template?<class?T>?? class?SinglyLinkedList?:?public?LinkNode<T>?{?? public:?? ????????SinglyLinkedList()?{cout?<<?"Constructing?a?SinglyLinkedListList?by?default?way"?<<?endl;?first?=?new?LinkNode<T>;}?? ????????SinglyLinkedList(const?T&x);?? ????????SinglyLinkedList(SinglyLinkedList<T>&?L);????????? ????????~SinglyLinkedList()?{cout?<<?"Destructing?a?SinglyLinkedListNode?by?default?way"?<<?endl;?delete?first;}?? ????????void?makeEmpty();????????????? ????????int?Length()?const;??????????? ????????LinkNode<T>?*GetHead()?const?{return?first;}??? ????????LinkNode<T>?*Search(T?x);????? ????????LinkNode<T>?*Locate(int?i);??? ????????bool?GetData(int?i,?T&?x);?????????? ????????void?SetData(int?i,?T&?x);???????????????? ????????bool?Insert(int?i,?T&?x);????????????????? ????????bool?Remove(int?i,?T&?x);????????????????? ????????bool?IsEmpty()?const?{return?first->link?==?NULL???true?:?false;}?? ????????bool?IsFull()?const?{return?false;}?? ????????void?Sort();?????????????????????????????? ????????void?Input();????????????????????????????? ????????void?Output();???????????????????????????? ????????SinglyLinkedList<T>&?operator=(SinglyLinkedList<T>&?L);??? protected:?? ????????LinkNode<T>?*first;??????? };?? ?? #endif?//?SinglyLinkedListEDLIST_H_INCLUDED??
單鏈表實現(xiàn)
[cpp]?view plaincopy
#include?<bits/stdc++.h>?? #include?"SinglyLinkedList.h"?? ?? using?namespace?std;?? ?? template<class?T>?? SinglyLinkedList<T>::SinglyLinkedList(const?T&x)?{?? ????????first?=?new?LinkNode<T>;?? ????????if(first?==?NULL)?{?? ????????????????cerr?<<?"Invalid?allocation?"?<<?endl;?? ????????}?? ????????first->link->data?=?x;?? }?? ?? template<class?T>?? SinglyLinkedList<T>::SinglyLinkedList(SinglyLinkedList<T>&?L)?{?????????? ????????LinkNode<T>?*destptr?=?first?=?new?LinkNode<T>;?? ????????LinkNode<T>?*srcptr?=?L.GetHead();?? ????????while(srcptr->link?!=?NULL){?? ????????????????destptr->link?=?srcptr->link;?? ????????????????destptr->link->data?=?srcptr->link->data;?? ????????????????destptr?=?destptr->link;?? ????????????????srcptr?=?srcptr->link;?? ????????}?? }?? ?? template<class?T>?? void?SinglyLinkedList<T>::makeEmpty()?{?? ?????????? ????????LinkNode<T>?*current;?? ????????while(first->link?!=?NULL)?{?? ???????????????current?=?first->link;?? ???????????????first->link?=?current->link;?? ???????????????delete?current;?? ????????}?? }?? ?? template<class?T>?? int?SinglyLinkedList<T>::Length()?const?{?? ????????int?cnt?=?0;?? ????????LinkNode<T>?*current?=?first;?? ????????while(current->link?!=?NULL)?{?? ????????????????cnt++;?? ????????????????current?=?current->link;?? ????????}?? ????????return?cnt;?? }?? ?? template<class?T>?? LinkNode<T>*?SinglyLinkedList<T>::Search(T?x)?{???????? ????????LinkNode<T>?*current?=?first;?? ????????while(current->link?!=?NULL)?{?? ????????????????if(current->link->data?==?x)?{?? ????????????????????????return?current;?? ????????????????}?? ????????????????current?=?current->link;?? ????????}?? ????????return?NULL;?????? }?? ?? template<class?T>?? LinkNode<T>*?SinglyLinkedList<T>::Locate(int?i)?{?? ?????????? ????????if(i?<?0)?{?? ????????????????cerr?<<?"Invalid?Location?of?"?<<?i?<<?endl;?? ????????????????return?NULL;?? ????????}?? ????????LinkNode<T>?*current?=?first;?? ????????int?k?=?0;?? ????????while(current?!=?NULL?&&?k?<?i)?{?? ????????????????current?=?current->link;?? ????????????????k++;?? ????????}?? ????????return?current;??????????? }?? ?? template<class?T>?? bool?SinglyLinkedList<T>::GetData(int?i,?T&?x)?{?? ????????if(i?<=?0)?{?? ????????????????cerr?<<?"Invalid?index?of?"?<<?i?<<?endl;?? ????????????????return?false;?? ????????}?? ????????LinkNode<T>?*current?=?Locate(i);?? ????????if(current?==?NULL)?{?? ????????????????return?false;?? ????????}?? ????????x?=?current->data;?? ????????return?true;?? }?? ?? template<class?T>?? void?SinglyLinkedList<T>::SetData(int?i,?T&?x)?{?? ????????if(i?<=?0)?{?? ????????????????cerr?<<?"Invalid?index?of?"?<<?i?<<?endl;?? ????????????????return?;?? ????????}?? ????????LinkNode<T>?*current?=?Locate(i);?? ????????if(current?==?NULL)?return?;?? ????????current->data?=?x;?? }?? ?? template<class?T>?? bool?SinglyLinkedList<T>::Insert(int?i,?T&?x)?{?? ?????????? ????????if(i?<=?0)?{?? ????????????????cerr?<<?"Invalid?index?of?"?<<?i?<<?endl;?? ????????????????return?false;?? ????????}?? ????????LinkNode<T>?*current?=?Locate(i-1);?? ????????if(current?==?NULL)?{?? ????????????????return?false;?? ????????}?? ????????LinkNode<T>?*newLinkNode?=?new?LinkNode<T>(x);?? ????????if(newLinkNode?==?NULL)?{?? ????????????????cerr?<<?"Invalid?allocation?"?<<?endl;?? ????????????????return?false;?? ????????}?? ????????newLinkNode->link?=?current->link;?? ????????current->link?=?newLinkNode;?? ????????return?true;?? }?? ?? template<class?T>?? bool?SinglyLinkedList<T>::Remove(int?i,?T&?x)?{?? ?????????? ????????if(i?<=?0)?{?? ????????????????cerr?<<?"Invalid?position?"?<<?endl;?? ????????}?? ????????LinkNode<T>?*current?=?Locate(i-1);?? ????????if(current?==?NULL?||?current->link?==?NULL)?{?? ????????????????return?false;????? ????????}?? ????????LinkNode<T>?*del?=?current->link;?? ????????x?=?del->data;?? ????????current->link?=?del->link;?? ????????delete?del;?? ????????return?true;?? }?? ?? template<class?T>?? void?SinglyLinkedList<T>::Sort()?{?? ?????????? ????????LinkNode<T>?*p?=?first->link;?? ????????LinkNode<T>?*q;?? ????????T?value;?? ????????while(p->link?!=?NULL)?{?? ????????????????q?=?p->link;?? ????????????????while(q?!=?NULL)?{?? ????????????????????????if(q->data?<?p->data)?{?? ????????????????????????????????value?=?p->data;?? ????????????????????????????????p->data?=?q->data;?? ????????????????????????????????q->data?=?value;?? ????????????????????????}?? ????????????????????????q?=?q->link;?? ????????????????}?? ????????????????p?=?p->link;?? ????????}?? }?? ?? template<class?T>?? void?SinglyLinkedList<T>::Input()?{?? ????????int?cnt;?? ????????cout?<<?"Please?enter?the?total?nodes?of?the?SinglyLinkedListedList"?<<?endl;?? ????????while(true)?{?? ????????????????cin?>>?cnt;?? ????????????????if(cnt?<=?0)?{?? ????????????????????????cerr?<<?"Invalid?length?of?SinglyLinkedListedList,?the?length?must?be?a?positive?interger?"?<<?endl;?? ????????????????}?? ????????????????else?break;?? ????????}?? ????????LinkNode<T>?*current?=?first;?? ????????T?val;?? ????????for(int?i?=?1;?i?<=?cnt;?++i)?{?? ????????????????cin?>>?val;?? ????????????????current->link?=?new?LinkNode<T>(val);?? ????????????????current?=?current->link;?? ????????}?? }?? ?? template<class?T>?? void?SinglyLinkedList<T>::Output()?{?? ????????LinkNode<T>?*current?=?first;?? ????????int?cnt?=?1;?? ????????while(current->link?!=?NULL)?{?? ????????????????cout?<<?"#No.?"?<<?cnt++?<<?"??"??<<?current->link->data?<<?endl;?? ????????????????current?=?current->link;?? ????????}?? }?? ?? template<class?T>?? SinglyLinkedList<T>&?SinglyLinkedList<T>::operator=(SinglyLinkedList<T>&?L)?{?? ????????LinkNode<T>?*srcptr,?*destptr;?? ????????destptr?=?first?=?new?LinkNode<T>;?? ????????srcptr?=?L.GetHead();?? ????????while(srcptr->link?!=?NULL)?{?? ????????????????destptr->link?=?srcptr->link;?? ????????????????destptr->link->data?=?srcptr->link->data;?? ????????????????destptr?=?destptr->link;?? ????????????????srcptr?=?srcptr->link;?? ????????}?? ????????destptr->link?=?NULL;?? ????????return?*this;?? }?? int?main()?? {?? ????????int?a?=?10;?? ????????SinglyLinkedList<int>?SinglyLinkedListList;?? ????????if(SinglyLinkedListList.IsEmpty())?{?? ????????????????cout?<<?"Jesus?Christ,?is?empty!"?<<?endl;?? ????????}?? ????????SinglyLinkedListList.Input();?? ????????cout?<<?"Length:?"?<<?SinglyLinkedListList.Length()?<<?endl;?? ????????SinglyLinkedListList.Sort();?? ????????SinglyLinkedListList.Output();?? ????????int?num?=?284;?? ????????SinglyLinkedListList.Insert(1,?num);?? ????????SinglyLinkedListList.Insert(2,?num);?? ????????SinglyLinkedListList.Insert(3,?num);?? ????????SinglyLinkedListList.Output();?? ????????cout?<<?"\n----------------------------\n";?? ????????SinglyLinkedListList.Sort();?? ????????SinglyLinkedListList.Output();?? ????????SinglyLinkedListList.GetData(1,?a);?? ????????cout?<<?"a:?"?<<?a?<<?endl;?? ????????cout?<<?"Length?before?remove?the?first?element?is:???"?<<?SinglyLinkedListList.Length()?<<?endl;?? ????????SinglyLinkedListList.Remove(1,?a);?? ????????cout?<<?"a:?"?<<?a?<<?endl;?? ????????cout?<<?"Length?after?remove?the?first?element?is:???"?<<?SinglyLinkedListList.Length()?<<?endl;?? ????????SinglyLinkedListList.Output();?? ????????SinglyLinkedListList.makeEmpty();?? ????????if(SinglyLinkedListList.IsEmpty())?{?? ????????????????cout?<<?"Jesus?Christ,?is?Empty!"?<<?endl;?? ????????}?? ?? ????????return?0;?? } ?
總結(jié)
以上是生活随笔為你收集整理的数据结构之单链表——C++模板类实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。