C++实现单链表的基本操作

没学过c++,一点也不会,接下来要怎么补充,前面补充的有问题吗?希望能帮忙看看


 #include <iostream.h>



 //定义线性表类型List

 template <class T>

 class List {

     void clear();

     bool isEmpty();

      bool insert(const int p, const T value);

      bool delete1(const int p);

     bool getPos(int& p, const T value);

      bool getValue(const int p, T & value);

      bool setValue(const int p, const T value);

    
};



 //定义单链表结点类型

 template <class T>

 class Link {

 public:

     T data;

     Link<T>* next;
     Link(const T info, const Link<T>* nextValue = NULL)
    
     {  
         data = info;
         next = nextValue;
 }

    
};

 //定义单链表类型lnkList

 template <class T>

 class lnkList : public List<T> {

 private:

     Link<T>* head, * tail;//头指针、尾指针
     Link<T>* setPos(const int p);
 public:
     lnkList(int s);
     ~lnkList();
     bool isEmpty();
     void clear();
     int length();
     bool append(const T value);
     bool insert(const int p, const T value);
     bool delete(const int p);
     bool getValue(const int p, T& value);
     bool getPos(int& p, const T value);
 }

    

          //返回单链表第p个元素的地址(p=-1返回头结点地址,0返回第1结点地址,不存在返回NULL)

          Link<T> *setPos(const int p) {

           if (p == -1) return head;  //p为-1则返回头结点地址

           int count = 0;

           Link<T> *tmp = head->next;   //c指向第1个结点   head->头结点   c->第1结点

           while (tmp != NULL && count < p) {    //head->头结点->第1结点->c第2结点->第3结点NULL 

                count++;

                tmp = tmp->next;     //c指向下一结点(指针传递技术)   

            
        }

           return c;

        
    }

               //c指向尾结点的条件:c->next==NULL

                   //c指向倒数第二个结点的条件: c->next->next==NULL

 public:

      //构造函数:构造一个只有头结点的空链表

          lnkList() {

           head = tail = new Link<T>;

       head->next = NULL;

        
    }

      //析构函数:删除所有结点

          ~lnkList() {

           Link<T> *tmp;

           while (head != NULL) {

                tmp = head;    //tmp指向头结点

                head = head->next;  //head指向下一结点

                delete tmp;    //释放头结点

            
        }

        
    }

      //2.显示

          bool display() {

           Link<T> *tmp = head->next; //tmp指向第1结点

           if (tmp == NULL) cout << "空表\n";

           else {

            while (tmp != NULL) {

                     cout << tmp->data << "  ";

                     tmp = tmp->next;  //tmp指向下一结点

                
            }

                cout << endl;

            
        }

           return true;

        
    }

      //3.求表长

          bool length(int& i) {

           i = 0;

           Link<T> *p = head->next; //p指向第1结点

           while (p != NULL) {

                i++;

                p = p->next;

            
        }

           return true;

        
    }

    

          //5.追加

          bool append(const T value) {

           Link<T> *p, * q;

           q = new Link<T>; //q指向新结点

           q->data = value;  //填入新结点的数据域

           q->next = NULL;  //填入新结点的指针域NULL

           p = tail;    //p指向尾结点,也可以p=head->next; while(p->next!=NULL) p=p->next;

           p->next = q;   //新结点链入原尾结点之后

           tail = q;    //修改尾指针

           return true;

        
    }

            //尾结点的条件p->next == NULL,头结点的条件p == head

                //第1结点的条件p == head->next,单链表结束的条件 p == NULL

        

        
};





void main()

{

    lnkList<int> LL;

    int choice, p, value;

    bool ok;

    do {

        cout << "单链表程序(0退出,1清除,2显示,3表长,4插入,5追加,6删除,7查找,8修改,9定位),请选择:";

        cin >> choice;

        switch (choice) {

        case 0:

            cout << "再见!\n";

            break;

        case 1:

            break;

        case 2:

            ok = LL.display();

            if (ok == true) cout << "显示操作成功!\n";

            else cout << "显示操作失败!\n";

            break;

        case 3:

            ok = LL.length(p);

            if (ok == true) cout << "求表长操作成功!表长为:" << p << endl;

            else cout << "求表长操作失败!\n";

            break;

        case 4:

            break;

        case 5:

            cout << "请输入元素值:"; cin >> value;

            ok = LL.append(value);

            if (ok == true) cout << "追加操作成功!\n";

            else cout << "追加操作失败!\n";

            break;

        case 6:

            break;

        case 7:

            break;

        case 8:

            break;

        case 9:

            break;

        default:

            cout << "选择错误!\n";


        }


    } while (choice != 0);
}

数据结构对单链表进行数据排序 http://bbs.csdn.net/topics/392201633