線性表的鏈式表示——雙鏈表
阿新 • • 發佈:2021-06-23
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; }