C++单链表基本算法实现

C++单链表基本算法实现

#ifndef LinkList_h
#define LinkList_h
#include <iostream>
using namespace std; template
<class T> struct Node{ T data; struct Node<T> * next; }; template <class T> class LinkList { public: LinkList(){front = new Node<T>; front->next = NULL;} LinkList(T a[],int n); ~LinkList(); void PrintList(); int GetLength(); Node<T> * Get(int i); int Locate(T x); void Insert(int i, T x); T Delete(int i); private: Node<T> * front; }; template <class T> LinkList<T>::LinkList(T a[], int n){ // front = new Node<T>; //头插法 // front->next = NULL; // for(int i = n-1; i>=0; i--){ // Node<T> *s = new Node<T>; // s->data = a[i]; // s->next = front->next; // front->next = s; // } front = new Node<T>; //尾插法 Node <T> * r = front; for(int i = 0;i<n;i++){ Node <T> *s = new Node<T>; s->data = a[i]; r->next = s; r = s; } r->next = NULL; } template <class T> LinkList<T>::~LinkList(){ Node <T> *p = front; while(p){ front = p; p = p->next; delete front; } } template <class T> Node<T> *LinkList<T>::Get(int n){ Node<T>* p = front->next; int j = 1; while (p && (j != n)){ p = p->next; j++; } if(!p) throw "查找位置非法"; else return p; } template <class T> int LinkList<T>::Locate(T x){ Node<T> * p = front->next; int j = 1; while(p){ if(p->data == x){ return j; }else{ p = p->next; j++; } } return -1; } template <class T> void LinkList<T>::Insert(int i, T x){ Node<T>* p = front; p = Get(i); if(p){ Node <T>*s = new Node <T>; s->data = p->data; s->next = p->next; p->next = s; p->data = x; } else{ throw "位置插入错误";} } template <class T> T LinkList<T>::Delete(int i){ Node <T> *p = front; if(i!=1) p = Get(i-1); Node<T>*q = p->next; p->next = q->next; T x = q->data; delete q; return x; } template <class T> int LinkList<T>::GetLength(){ if(!front->next) return 0; Node <T> *p = front->next; int j = 0; while(p){ p = p->next; j++; } return j; } template <class T> void LinkList<T>::PrintList(){ Node <T> *p = front->next; if(!p) {cout<< "链表为空列表!"<<endl; return; } cout<<"按顺序单链表的各个数据元素是:"<<endl; while(p){ cout<<p->data<<" "; p= p->next; } cout << endl; } #endif /* LinkList_h */

猜你喜欢

转载自www.cnblogs.com/ycbeginner/p/10006328.html