zoukankan      html  css  js  c++  java
  • C++ 循环链表基本算法

    C++ 循环链表基本算法

    #ifndef CLinkList_h
    #define CLinkList_h
    #include <iostream>
    using namespace std;
    template <class T>
    struct Node{
        T data;
        struct Node<T> * next;
    };
    template <class T>
    class CLinkList
    {
    public:
        CLinkList(){rear = new Node<T>; rear ->next = rear;}
        CLinkList(T a[], int n);
        ~CLinkList();
        int GetLength();
        Node<T>* Get(int i);
        int Locate(T x);
        void Insert(int i, T x);
        T Delete( int i);
        void PrintList();
        void Connect(CLinkList<T> &b);
    private:
        Node<T>*rear;
    };
    template <class T>
    CLinkList<T>::CLinkList(T a[], int n){
        rear = new Node<T> ;
        rear->next = rear;
        for(int i = 0;i< n;i++){
            Node<T> * s = new Node<T>;
            s->data = a[i];
            s->next = rear->next;
            rear->next = s;
        }
    }
    template <class T>
    CLinkList<T>::~CLinkList(){
        rear = rear->next;
        Node <T> *p = rear->next;
        Node <T>*q;
        while(p!=rear){
            q = p->next;
            delete p;
            p = q;
            //delete rear;
        }
        rear->next = rear;
    }
    template <class T>
    int CLinkList<T>::GetLength(){
        if(rear->next == rear) return 0;
        Node<T>* p = rear->next;
        int j = 0;
        while (p!= rear){
            p= p->next;
            j++;
        }
        return j;
    }
    template <class T>
    Node<T>* CLinkList<T>::Get(int i){
        if(i<1) throw " 查找位置错误";
        Node<T>* p = rear;
        for(int j = 0; j< i;j++){
            p = p->next;
        }
        return p;
        
    }
    template <class T>
    int CLinkList<T>:: Locate(T x){
        Node<T> * p = rear->next;
        int j = 1;
        while(p!= rear){
            
            if(p->data == x){
                return j;
            }else{
                p = p->next;
                j++;
            }
        }
        return -1;
    }
    template <class T>
    void CLinkList<T>::Insert(int i, T x){
        if(i<1 || i> GetLength()) throw"位置插入错误";
        Node<T>* p = rear;
        p = Get(i);
        Node <T>*s = new Node <T>;
        s->data = p->data;
        s->next = p->next;
        p->next = s;
        p->data = x;
    }
    template <class T>
    T CLinkList<T>:: Delete( int i){
        if(i<1 || i> GetLength()) throw"位置错误";
        Node<T> * p = rear->next;
        int j = 1;
        while(j<i-1){
            p = p->next;
            j++;
        }
        Node<T>* s = p->next;
        p->next = s->next;
        if(s == rear){
            rear = p;
        }
        T x = s->data;
        return x;
        
    }
    template <class T>
    void CLinkList<T>:: PrintList(){
        Node <T> *p = rear->next;
        if(p->next == rear) {cout<< "链表为空列表!"<<endl; return; }
        cout<<"按顺序单链表的各个数据元素是:"<<endl;
        while(p!=rear){
            cout<<p->data<<" ";
            p= p->next;
        }
        cout << endl;
    
    }
    template <class T>
    void CLinkList<T>::Connect(CLinkList<T> &b){
        Node<T> *q = b.rear->next;
        b.rear->next = rear->next;
        rear->next = q->next;
        rear = b.rear;
        delete q;
    }
    
    #endif /* CLinkList_h */
  • 相关阅读:
    double相加(減)结果会有些误差
    创建表,操作表
    删除数据库
    DDL语句
    HCDA-12-配置基本静态路由
    HCDA-11-配置直连路由
    1-5配置STelnet登录系统
    HCDA-9-管理设备文件系统
    HCDA-8-了解设备系统文件
    Java生成随机汉字
  • 原文地址:https://www.cnblogs.com/ycbeginner/p/10006351.html
Copyright © 2011-2022 走看看