单链表类
来源:互联网 发布:设计动画的软件 编辑:程序博客网 时间:2024/05/19 06:35
/*链表类*/#include <iostream>#include <cstdio>using namespace std;template <class T>class Linklist;template <class T>class Node{ private: friend class Linklist<T>; Node<T> *next; T data; public: Node( T d=0,Node<T> *ne=NULL ) { data=d; next=ne; } T getdata() { return data; } Node<T> *getnext() { return next; } void setdata( T d ) { data=d; } void setnext( Node<T> *a ) { next=a; }};template <class T>class Linklist{ private: int curlen; Node<T> *head; public: Linklist( T *a,int n ) { curlen=n; int i=n-1; Node<T> *p; head=new Node<T>(0,NULL); while( i>=0 ) { p=new Node<T>( a[i],head->next ); head->setnext(p); i--; } } Node<T> *index( int i ); //求结点指针 int loct( T d ); //查找 bool inst( int loc,T d ); //插入 bool dele( int loc ); //删除 void print();};template <class T>Node<T> *Linklist<T>::index( int i ){ if( i<1 || i>curlen ) return NULL; else { Node<T> *p=head; while( i>0 && p->next!=NULL ) { p=p->next; i--; } return p; }}template <class T>int Linklist<T>::loct( T d ){ int i=1; Node<T> *p=head->next; while( p!=NULL ) { if( p->data==d ) return i; i++; p=p->next; } return 0;}template <class T>bool Linklist<T>::inst( int loc,T d ){ int i=1; if( loc<1 || loc>curlen+1 ) return false; Node<T> *p=index( loc-1 ); Node<T> *q=new Node<T>( d,p->next ); p->setnext(q); curlen++; return true;}template <class T>bool Linklist<T>::dele( int loc ){ if( loc<1 || loc>curlen ) return false; Node<T> *p=index( loc-1 ); p->setnext( p->next->next ); curlen--; return true;}template <class T>void Linklist<T>::print(){ Node<T> *p=head->next; while( p!=NULL ) { cout<<p->data<<" "; p=p->next; } cout<<endl;}int main(){ int i; int a[10]={ 1,2,304,43,32,36,40,66,91,82 }; Linklist<int> test( a,10 ); cout<<test.loct(43)<<endl; test.dele(4); test.inst(4,34); test.print(); return 0;}