其他分享
首页 > 其他分享> > c语言双链表实现

c语言双链表实现

作者:互联网

#include <stdio.h>
#include <stdlib.h>

#define OK 1;
#define ERROR -1;

typedef int Status;

typedef int ElemType;
typedef struct DuLnode{
    ElemType data;
    DuLnode *next,*prior;
}DuLnode,*DuLinkNode;

Status InitDuLnode(DuLinkNode &L){
    L = (DuLinkNode)malloc(sizeof(DuLnode));
    L->next = NULL;
    L->prior = NULL;
    printf("init success \n");
    return OK;
} 

//创建双链表补充数据 
Status CreateDuLinkNode(DuLinkNode &L){
    DuLinkNode p,q;
    p = L;
    for (int i=0;i<10;i++){
        q = (DuLinkNode)malloc(sizeof(DuLnode));
        q -> data = i;
        q -> prior = p;
        q -> next = NULL;
        p -> next = q;
        p = p ->next;
    } 
    return OK;
}

//查找元素返回指针 
DuLinkNode GetElemByIndex(DuLinkNode &L,int i){
    DuLinkNode p;
    p = L;
    for (int j=0;j<i;j++){
        p = p->next;
    }
    printf("data is %d\n",p->data);
    return p; 
}


int GetElem(DuLinkNode L){
    DuLinkNode p;
    p = L;
    while(p->next){
        p = p->next;
        printf("%d\n",p->data);
    }
    return 0;
}

//插入结点 
Status InsertDuLinkNode(DuLinkNode L, int i, ElemType e){
    DuLinkNode p,q;
    p = GetElemByIndex(L,i);
    q = (DuLinkNode)malloc(sizeof(DuLnode));
    if(q){
        q->data = e ;
        q->prior = p->prior;
        p->prior->next = q;
        q->next = p;
        p->prior = q;
        return OK;
    }
    return ERROR;

}

//删除结点 
Status DeleteDuLinkNode(DuLinkNode L, int i){
    DuLinkNode p,q,r;
    p = GetElemByIndex(L,i);
    if(p){
        r = p->next;
        q = p->prior;
        r->prior = q;
        q->next = r;
        free(p);
        return OK;    
    }
    return ERROR;

}



int main(){
    DuLinkNode L;
    InitDuLnode(L);
    CreateDuLinkNode(L);
    InsertDuLinkNode(L,3,33);
    DeleteDuLinkNode(L,1);
    DeleteDuLinkNode(L,5);

    GetElem(L);
    GetElemByIndex(L,1); 
    return 0;
}

 

 

标签:return,语言,prior,实现,next,int,双链,DuLinkNode,data
来源: https://www.cnblogs.com/Pynu/p/16203891.html