雙鏈表分析

2021-07-04 19:41:38 字數 1056 閱讀 5109

網上很多對雙向鍊錶解釋的文章都是用這個結構:

它們的連線情況是這樣的:

相當的不直觀,今天我要從詳細的位址出發來解釋雙向鍊錶的原理。

現定義乙個結構體如下:

struct student ;

現在有5個人a,b,c,d,e.這五個人構成的鍊錶如下:

虛線部分為位址值,這個是為了描述方便隨便寫的值,在建立上述的鍊錶時其實不用關心位址值到底是多少,這些位址都會放到某個變數當中,只要對變數進行賦值傳遞就能實現鍊錶的構建。這裡完全是為了分析才這麼寫的。從圖中很容易看出藍色的箭頭組成了乙個單鏈表,紅色的箭頭又組成了乙個單鏈表(逆向的)。

下面將分析鍊錶的前插與刪除的例子,理解了這兩個功能,其他的功能都能自己分析出來了。

雙鏈表的前插,下面這是**和**分析。

下面再分析刪除,刪除比較簡單,**如下:

void deletenode(student *p)

{//在帶頭結點的雙鏈表中,刪除結點*p,設*p為非終端結點

p->prior->next=p->next;// 將p->next即0x0700送到q->next中,即0x0500被替換成了0x0700(圖中沒改過來),如紫線。

p->next->prior=p->prior;// p->prior為0x0300送到了s->prior即原本是0x0500的地方(圖中沒改過來),如綠線。

free(p);//將p記憶體釋放,同時將之前的四根紅藍線全部斷裂,至此完成刪除任務。

單鏈表 雙鏈表

實現乙個單鏈表,鍊錶初始為空,支援三種操作 1 向煉表頭插入乙個數 2 刪除第k個插入的數後面的數 3 在第k個插入的數後插入乙個數 現在要對該鍊錶進行m次操作,進行完所有操作後,從頭到尾輸出整個鍊錶。注意 題目中第k個插入的數並不是指當前鍊錶的第k個數。例如操作過程中一共插入了n個數,則按照插入的...

單鏈表和雙鏈表

單鏈表 單鏈表只有乙個指向下一結點的指標,也就是只能next 雙鏈表 雙鏈表除了有乙個指向下一結點的指標外,還有乙個指向前一結點的指標,可以通過prev 快速找到前一結點,顧名思義,單鏈表只能單向讀取 為什麼市場上單鏈表的使用多餘雙鏈表呢?從儲存結構來看,每個雙鏈表的節點要比單鏈表的節點多乙個指標,...

單鏈表和雙鏈表

單鏈表 是乙個node,儲存當前物件,並指向下乙個next,插入在第一位node,next指向原來的first 單鏈表 只儲存第乙個node的引用,雙端鍊錶 儲存兩個node的引用,第乙個和最後乙個node,可以從第乙個插入,也可以從最後乙個插入,也可以從頭部和尾部刪除 鏈結點,相當於是車廂 pub...