四 迴圈鍊錶和雙向鍊錶

2021-09-24 08:54:21 字數 1181 閱讀 4214

迴圈鍊錶

迴圈鍊錶是鏈式儲存結構的另一種形式,特點是單鏈表的最後乙個結點(終端結點)的指標域不為空,而是指向鍊錶的頭結點,使整個鍊錶形成乙個環。

例子:

/*

將值為x的新結點插入到從大到小有序迴圈鍊錶的適當位置

*/int insertdata(linklist head,int x)

p->next = s; //插入s結點

s->next = q;

}

雙向鍊錶
在單鏈表的結點型別中增加乙個指向其直接前驅的指標域prior,這樣形成的鍊錶中有兩條不同方向的鏈,稱為雙向鍊錶。

上圖終端結點又指向頭結點,因此稱作雙向迴圈鍊錶雙向鍊錶結構如下:

typedef

int datatype;

typedef

struct dlnote

dlnote;

typedef dlnote * dlinklist;

dlinklist head;

雙向鍊錶的插入與刪除
/*

將值得x的新結點插入到帶頭結點的雙向鍊錶中指定結點*p之前

*/void

dlinsert

(dlnote *p,datatype x)

/* 刪除帶頭結點的雙向鍊錶中指定結點p

*/datatype dldelete

(dlnote *p)

假設有乙個頭結點指標為head的迴圈雙向鍊錶,其結點型別包括三個域:prior、data、next。但是其指向前趨結點的指標域prior為空,因此該雙向鍊錶其實是乙個單迴圈鍊錶。試寫一演算法,將其修改為真正的雙迴圈鍊錶。

void

trans

(dlinklist head)

head -> prior = p;

}

雙向鍊錶和雙向迴圈鍊錶

和單向鍊錶相比,多了乙個前驅結點。如果他為空,那麼next和prior都指向自己。而對於雙迴圈鍊錶,只需要最後乙個元素的next指向head next,head next的prior指向最後乙個節點即可。新節點s插入鍊錶,s next給p結點,s prior給p prior,然後,p prior n...

雙向鍊錶和迴圈鍊錶

雙向鍊錶和單鏈表的區別就在於多了乙個前驅 有需要檢視單鏈表的在主頁裡面查詢 雙向鍊錶 如下 typedef class node node class doublelist doublelist node buynode int val,node next,node pre void insert ...

(四)迴圈鍊錶及雙向鍊錶

約瑟夫問題 迴圈鍊錶的特點 判斷單鏈表中是否有環 例題雙向鍊錶 對於單鏈表,由於每個結點只儲存了向後的指標,到了尾部標識就停止了向後鏈的操作。也就是說,按照這樣的方式,只能索引後繼節點,不能索引前驅節點。不從頭結點出發就無法訪問到全部節點,故有了迴圈鍊錶 鍊錶儲存結構定義 typedef struc...