双链表

//双链表

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;}

posted @ 2020-09-07 22:33  w_w_t  阅读(145)  评论(0编辑  收藏  举报