zoukankan      html  css  js  c++  java
  • 双链表

    //双链表
    
    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;}

  • 相关阅读:
    微信开发:消息回复总结
    *** wechat-php-sdk 微信公众平台php开发包
    **微信接入探秘(一)——从零认识微信接口(主动接口和被动接口)
    《30天自制操作系统》笔记(01)——hello bitzhuwei’s OS!【转】
    Linux进程调度原理【转】
    Linux进程核心调度器之主调度器schedule--Linux进程的管理与调度(十九)【转】
    Tslib触摸屏官网【转】
    Tslib的移植【转】
    Linux Kernel代码艺术——数组初始化【转】
    Linux 内核进程管理之进程ID【转】
  • 原文地址:https://www.cnblogs.com/w-w-t/p/13629664.html
Copyright © 2011-2022 走看看