雙向鏈表

 

雙向鏈表

/*線性表的雙向鏈表存儲結構*/

typedef struct DulNode

{

ElemType data;

struct DulNode *prior;

struct DulNode *next;

} DulNode, *DulLinkList;

帶頭結點的循環雙向鏈表的空鏈表如下圖:

帶頭結點的循環雙向鏈表的非空鏈表如下圖:

對於雙向鏈表中的某一個節點p,它的後繼的前驅是自己,前驅的後繼也是自己,即:

p->next->prior = p->prior->next

雙向鏈表的插入操作

假設存儲元素e的結點爲s,要將結點s插到結點p和p->next之間,可以這麼做:

s->prior = p; /*把p賦給s的前驅*/

s->next = p->next; /*把p->next賦給s的後繼*/

p->next->prior = s; /*把s賦給p->next的前驅*/

p->next = s; /*把s賦給p的後繼*/

必須在②③之後,因爲②③使用了p->next。

雙向鏈表的刪除操作

刪除結點p可以如下做:

p->prior->next = p->next; /*把p->next賦給p->prior的後繼*/

p->next->prior = p->prior; /*把p->prior賦給p->next的前驅*/

free (p); /*釋放結點*/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章