雙向鏈表
●/*線性表的雙向鏈表存儲結構*/
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); /*釋放結點*/