首页 > 代码库 > 单链表类模板
单链表类模板
单链表类模板节点头
ListNode.h
1 #include "stdafx.h" 2 #include<iostream> 3 using namespace std ; 4 template<typename Type> class SingleList; 5 template <typename Type> 6 class ListNode{ 7 private: 8 friend class SingleList<Type>; 9 ListNode():m_next(NULL){}10 ListNode(const Type item , ListNode<Type>*next=NULL):m_data(item),m_next(next){}11 ~ListNode(){m_next=NULL;}12 public:13 Type getData(){return m_data ; }14 friend ostream& operator<<(ostream&,ListNode<Type>&);15 private:16 Type m_data;17 ListNode *m_next;18 };19 template<typename Type>20 ostream& operator<<(ostream& os , ListNode<Type>& out){21 os << out.m_data;22 return os;23 }
单链表头
SingleList.h
1 #include "ListNode.h" 2 template<typename Type> 3 class SingleList{ 4 public: 5 SingleList(){head = new ListNode<Type>;} 6 ~SingleList(){ 7 makeEmpty(); 8 delete head; 9 } 10 public: 11 void makeEmpty(); 12 int length(); 13 ListNode<Type>* find(Type item , int n)const; 14 ListNode<Type>* find(int n)const; 15 bool insert(Type item, int n =0); 16 Type remove(int n); 17 bool removeAll(Type item); 18 Type get(int n); 19 void ReverseSinglyLinkedList(); 20 void print(); 21 private: 22 ListNode<Type> *head; 23 }; 24 template <typename Type> 25 void SingleList<Type>::makeEmpty(){ 26 ListNode<Type> * pdel = NULL; 27 while(head->m_next!=NULL){ 28 pdel = head->m_next; 29 head->m_next = pdel->m_next; 30 delete pdel; 31 } 32 } 33 template <typename Type> 34 int SingleList<Type>::length(){ 35 int count = 0 ; 36 ListNode <Type> *p = head->m_next; 37 while (p!=NULL){ 38 p = p->m_next; 39 count++; 40 } 41 return count; 42 } 43 template<typename Type> 44 ListNode<Type>*SingleList<Type>::find(int n)const{ 45 if(n<0){cout << "out of the boundary"<< endl ;return NULL;} 46 ListNode<Type>* p = head; 47 for(int i =0 ; i<=n&&p ;i++){ 48 p = p->m_next; 49 } 50 if(p==NULL){ 51 cout << "can‘t find the element"<<endl; 52 return NULL; 53 } 54 return p; 55 } 56 template<typename Type> 57 ListNode<Type>* SingleList<Type>::find(Type item , int n)const{ 58 if(n<1){ 59 cout << "the n is illegal" << endl; 60 return NULL; 61 } 62 ListNode<Type> *p = head; 63 int count = 0; 64 while(count!=n && p){ 65 p=p->m_next; 66 if(p->m_data=http://www.mamicode.com/=item) 67 count++; 68 } 69 if(p==NULL){ 70 cout << "can‘t find the element"<<endl; 71 return NULL; 72 } 73 return p; 74 } 75 template<typename Type> 76 bool SingleList<Type>::insert(Type item, int n=0){ 77 ListNode<Type> *p = head; 78 if(n<0){ 79 cout << "the n is illegal"<<endl; 80 return false; 81 } 82 ListNode<Type>* pnode = new ListNode<Type>(item); 83 ListNode<Type>* pmove = head; 84 if(pnode==NULL){ 85 cout << "Application is error "<< endl; 86 return false; 87 } 88 for(int i = 0 ; i<n&&pmove; i++){ 89 pmove = pmove->m_next; 90 } 91 if(pmove==NULL){ 92 cout << "the n is illegal " << endl; 93 return false; 94 } 95 pnode->m_next = pmove->m_next; 96 pmove->m_next = pnode; 97 return true; 98 } 99 template<typename Type>100 Type SingleList<Type>::remove(int n){101 if(n<0){102 cout << "can‘t find th element"<<endl;103 exit(0);104 }105 ListNode<Type>* pmove=head ,*pdel;106 for(int i = 0 ; i<n&&pmove ; i++){107 pmove = pmove->m_next;108 }109 if(pmove->m_next==NULL){110 cout << "can‘t find the element" <<endl;111 exit(0);112 }113 pdel = pmove->m_next;114 pmove->m_next = pdel->m_next;115 Type item = pdel->m_data;116 delete pdel;117 return item;118 }119 template <typename Type>120 bool SingleList<Type>::removeAll(Type item){121 ListNode<Type> *pmove = head,*pdel = pmove->m_next;122 while(pdel!=NULL){123 if(pdel->m_data=http://www.mamicode.com/=item){124 pmove->m_next = pdel->m_next;125 delete pdel;126 pdel = pmove->m_next;127 continue;128 }129 pmove=pmove->m_next;130 pdel = pdel->m_next;131 pmove = pmove->m_next;132 }133 return true;134 }135 template<typename Type>136 Type SingleList<Type>::get(int n){137 if(n<0){138 cout << "can‘t find the element "<<endl;139 exit(0);140 }141 ListNode<Type> *pmove =head->m_next;142 for(int i =0 ; i<n ; i++){143 pmove = pmove->m_next;144 if(NULL == pmove){145 cout << "can‘t find the element "<<endl;146 exit(0);147 }148 }149 return pmove->m_data;150 }151 template <typename Type>152 void SingleList<Type>::print(){153 ListNode<Type> *pmove = head->m_next;154 cout << "head";155 while (pmove!=NULL){156 cout << "->" << pmove->m_data;157 pmove = pmove->m_next;158 }159 cout << endl;160 }161 template<typename Type>162 void SingleList<Type>::ReverseSinglyLinkedList(){163 if(head->m_next==NULL)return;164 ListNode<Type> *pmove = head->m_next;165 ListNode<Type> *temp ;166 while(pmove->m_next!=NULL){167 temp = pmove->m_next;168 pmove->m_next = temp->m_next;169 temp->m_next = head->m_next;170 head->m_next = temp;171 }172 }
单链表类模板
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。