1. 程式人生 > 其它 >線性表的鏈式表示——雙鏈表

線性表的鏈式表示——雙鏈表

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