• 双链表


    //双链表
    
    typedef struct DLNode{
        int data;
        struct DLNode *prior;
        struct DLNode *next;
    }DLNode;
    
    //初始化
    void InitList(DLNode *&L){
        L = (DLNode*)malloc(sizeof(DLNode));
        L -> prior = NULL;
        L -> next = NULL;
    }
    
    //空表
    bool ListEmpty(DLNode *L){
        return (L -> prior ==NULL && L -> next == NULL);
    }
    
    //求表长
    int ListLength(DLNode *L){
        int  n = 0;
        DLNode *r = L;
        while(r -> next != NULL){
            n++;
            r = r -> next;
        }
        return n;
    }
    
    //求某个位置上的元素值
    bool GetElem(DLNode *L, int i, int &e){
        int n = 0;
        DLNode *r = L;
        if(ListEmpty(L))
            cout<<"空表!"<<endl;
        if(i < 0)
            return false;
        while(r != NULL && n < i){
            n++;
            r = r -> next;
        }
        if(r == NULL)
            return false;
        else{
            e = r -> data;
            return true;
        }
    }
    
    //按元素值查找
    int FindElem(DLNode *L,int e){
        int n = 1;
        DLNode *r = L -> next;
        while(r != NULL && r -> data != e){
            n++;
            r = r -> next;
        }
        if(r == NULL)
            return 0;
        else
            return n;
    }
    
    //插入数据元素
    bool InsertList(DLNode *&L , int i,int e){
        int n = 0;
        DLNode *r = L , *s;
        if(i < 0)return false;
        while(i < i - 1 && r != NULL){
            n++;
            r = r -> next;
        }
        if(r == NULL)return false;
        else{
            s = (DLNode*)malloc(sizeof(DLNode));
            s -> data = e;
            s -> next = r -> next;
            r -> next -> prior = s;
            r -> next = s;
            s -> prior = r;
            return true;
        }
    }
    
    //删除数据元素
    bool DeleteList(DLNode *&L ,int i,int &e){
        int n = 0;
        DLNode * r = L , *q;
        if(i < 0)
            return false;
        while(r != NULL && n < i-1){
            n++;
            r = r -> next;
        }
        if(r == NULL)
            return false;
        else{
            q = r -> next;
            if(q == NULL)
                return fasle;
            e = q -> data;
            r -> next = q -> next;
            if(r -> next != NULL)
                q -> next -> prior = r;
            free(q);
            return true;
        }
    }
    
    //头插法
    void CreateListF(DLNode *&L,int a[],int n){
        DLNode * s;
        for(int i = 0;i < n ; i++){
            s = (DLNode*)malloc(sizeof(DLNode));
            s -> data = a[i];
            s -> next = L -> next;
            if(L -> next != NULL)
                    L -> next -> prior = s;
            L -> next = s;
            s -> prior = L;
        }
    }
    
    //尾插法
    void CreateListR(DLNode *&L, int a[],int n){
        DLNode *r = L ,*s;
        for(int i = 0 ; i < n ; i++){
            s = (DLNode*)malloc(sizeof(DLNode));
            s -> data = a[i];
            r -> next = s;
            s -> prior = r;
            r = s;
        }
        r -> next = NULL;
    }

    //双链表
    typedef struct DLNode{int data;struct DLNode *prior;struct DLNode *next;}DLNode;
    //初始化void InitList(DLNode *&L){L = (DLNode*)malloc(sizeof(DLNode));L -> prior = NULL;L -> next = NULL;}
    //空表bool ListEmpty(DLNode *L){return (L -> prior ==NULL && L -> next == NULL);}
    //求表长int ListLength(DLNode *L){int  n = 0;DLNode *r = L;while(r -> next != NULL){n++;r = r -> next;}return n;}
    //求某个位置上的元素值bool GetElem(DLNode *L, int i, int &e){int n = 0;DLNode *r = L;if(ListEmpty(L))cout<<"空表!"<<endl;if(i < 0)return false;while(r != NULL && n < i){n++;r = r -> next;}if(r == NULL)return false;else{e = r -> data;return true;}}
    //按元素值查找int FindElem(DLNode *L,int e){int n = 1;DLNode *r = L -> next;while(r != NULL && r -> data != e){n++;r = r -> next;}if(r == NULL)return 0;elsereturn n;}
    //插入数据元素bool InsertList(DLNode *&L , int i,int e){int n = 0;DLNode *r = L , *s;if(i < 0)return false;while(i < i - 1 && r != NULL){n++;r = r -> next;}if(r == NULL)return false;else{s = (DLNode*)malloc(sizeof(DLNode));s -> data = e;s -> next = r -> next;r -> next -> prior = s;r -> next = s;s -> prior = r;return true;}}
    //删除数据元素bool DeleteList(DLNode *&L ,int i,int &e){int n = 0;DLNode * r = L , *q;if(i < 0)return false;while(r != NULL && n < i-1){n++;r = r -> next;}if(r == NULL)return false;else{q = r -> next;if(q == NULL)return fasle;e = q -> data;r -> next = q -> next;if(r -> next != NULL)q -> next -> prior = r;free(q);return true;}}
    //头插法void CreateListF(DLNode *&L,int a[],int n){DLNode * s;for(int i = 0;i < n ; i++){s = (DLNode*)malloc(sizeof(DLNode));s -> data = a[i];s -> next = L -> next;if(L -> next != NULL)L -> next -> prior = s;L -> next = s;s -> prior = L;}}
    //尾插法void CreateListR(DLNode *&L, int a[],int n){DLNode *r = L ,*s;for(int i = 0 ; i < n ; i++){s = (DLNode*)malloc(sizeof(DLNode));s -> data = a[i];r -> next = s;s -> prior = r;r = s;}r -> next = NULL;}

  • 相关阅读:
    Atitti  css   transition Animation differ区别
    Atitit 游戏引擎物理系统(1)爆炸效果
    Atitit.rsa密钥生成器的attilax总结
    新特性AAtitti css3 新特性attilax总结titti css
    Atitit 异常的实现原理 与用户业务异常
    Atitit.uke 团队建设的组织与运营之道attilax总结
    atitit 业务 触发器原理. 与事件原理 docx
    Atitit 基于dom的游戏引擎
    Atitit 团队建设的知识管理
    Javascript判断页面刷新或关闭的方法(转)
  • 原文地址:https://www.cnblogs.com/w-w-t/p/13629664.html
Copyright © 2020-2023  润新知