单链表类

来源:互联网 发布:设计动画的软件 编辑:程序博客网 时间: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;}

原创粉丝点击