关于数据结构:线性表的链式表示双链表

33次阅读

共计 611 个字符,预计需要花费 2 分钟才能阅读完成。

1、和单链表比拟

单链表无奈逆向检索
双链表可进可退
存储构造:

typedef struct DNode {              // 定义双链表节点类型
    ElemType data;                  // 数据域
    struct DNode *prior, *next;     // 前驱和后继指针
} DNode, *DLinkList;

2、插入节点

在 p 节点后插入 s 节点,留神执行的程序

/**
 * 在 p 节点之后插入 s 节点
 * @param p
 * @param s
 * @return
 */
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;
}

3、删除节点

删除 p 节点后的 q 节点

/**
 * 删除 p 的后继节点
 * @param p
 * @return
 */
bool DeleteNextNode(DNode *p) {if (p == NULL) {return false;}
    DNode *q = p->next;          // 找到 p 的后继节点 q
    if (q == NULL) {return false;}
    p->next = q->next;
    if (q->next != NULL) {       // q 节点不是最初一个节点
        q->next->prior = p;
    }
    free(q);                     // 开释空间节点
    return true;
}

正文完
 0