C语言实现双链表

87 阅读1分钟

 

双链表

1.双链表的初始化

bool InitDLinklist(DLinklist& L) {
    L = (DLinklist)malloc(sizeof(struct DNode));
    if (L == NULL)
        return false;  //内存不足,分配失败
    L->next = NULL;
    L->prior = NULL;
    return true;
}
​

2.双链表的插入

bool InsertNextDNode(DNode* p, DNode* s) {
    if (p == NULL || s == NULL)
        return false;
    s->next = p->next;
    if (p->next != NULL) {
        p->next->prior = s;
        p->next = s;
        s->prior = p;
    }
    return true;
}

3.双链表的删除

bool DeleteNextDNode(DNode* p) {
    if (p == NULL)
        return false;
    if (p->next == NULL)         //p没有后继节点
        return false;
    DNode* q = p->next;          //找到p的后继节点q
    p->next = q->next;
    if (q->next != NULL)         //q节点不是最后一个节点
        p->next->prior = p; 
    free(q);                     //释放节点空间
    return true;
}

4.双链表的销毁

void DestoryList(DLinklist& L) {
    //循环释放各个数据节点
    while (L->next != NULL) 
        DeleteNextDNode(L->next);
    free(L);
    L = NULL;
}