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 */
  • 相关阅读:
    JID 2.0 RC4 发布,高性能的 Java 序列化库
    FBReaderJ 1.6.3 发布,Android 电子书阅读器
    Arquillian 1.0.3.Final 发布,单元测试框架
    JavaScript 的宏扩展 Sweet.js
    Hypertable 0.9.6.5 发布,分布式数据库
    JRuby 1.7.0 发布,默认使用 Ruby 1.9 模式
    httppp 1.4.0 发布,HTTP响应时间监控
    Redis 2.6.0 正式版发布,高性能K/V服务器
    OfficeFloor 2.5.0 发布,IoC 框架
    XWiki 4.3 首个里程碑发布
  • 原文地址:https://www.cnblogs.com/ycbeginner/p/10006351.html
Copyright © 2011-2022 走看看