数据结构

数据结构——双链表

//双链表

typedef struct Dnode{

    ElemType data;

    struct Dnode *prior,*next;       //前驱和后继指针

}Dnode,*DLinklist;

 

//初始化双链表

bool InitDLinkList(DLinklist &L){

    L = (Dnode*)malloc(sizeof(Dnode));    //分配一个头节点

    if(L==NULL)                //内存不足,分配失败

        return false;

    L->prior = NULL;         //头节点的prior永远指向NULL

    L->next = NULL;          //头节点之后没有节点

    return true;

}

 

//判断双链表是否为空

bool Empty(DLinklist L){

    if(L->next==NULL)

        return true;

    else

        return false;

}

//插入,在p之后插入s节点

bool InsertNextDNode(Dnode *p,Dnode *s){

    if(p==NULL || s==NULL)    //非法参数

        return false;

    s->next=p->next;

    if(p->next != NULL)       //如果p节点后后继

        p->next->prior=s;

    s->prior=p;

    p->next=s;

    return true;

}

//删除p节点的后继节点

bool DeleteNextDEnode(Dnode *p){

    if(p==NULL)

        return false;

    Dnode *q = p->next;   //找到p的后继节点q

    if(q==NULL)

        return false;     //p没有后继

    p->next=q->next;

    if(q->next!=NULL)

        q->next->prior=p;

    free(q);

    return true;

}


//销毁表

void Destorylist(DLinklist &L){

    //循环释放各个数据节点

    while(L->next!=NULL)

        DeleteNextDNode(L);

    free(L);  //释放头节点

    L=NULL;   //头指针指向NULL

}

留言

您的电子邮箱地址不会被公开。