資料結構之鍊錶2

2021-10-03 00:06:40 字數 1615 閱讀 1141

繼上文 資料結構之鍊錶1之後,本文將繼續講解鍊錶。

迴圈單鏈表是另一種形式的單鏈表。它的特點是表中的最後乙個結點的指標域指向頭結點,整個鍊錶形成乙個環。因此,從迴圈單鏈表中任一結點出發均可找到表中其他結點,如下圖。

類似的,還可以有多重鏈的迴圈鍊錶。

迴圈單鏈表的底層實現

迴圈單鏈表的操作與單鏈表的實現基本一致,差別僅在於迴圈單鏈表每乙個結點都能訪問到其後繼結點。

myloopnode 是這裡定義的乙個結點類。

package util;

public

class

myloopnode

//刪除下乙個結點

public

void

removenext()

//插入乙個節點作為當前節點的下乙個節點

public

void

after

(myloopnode node)

//獲取下乙個結點

public myloopnode next()

//獲取當前結點的資訊

public

intgetdata()

}

簡單test:

package classify;

import util.myloopnode;

public

class

looplisttest

}

前面的鍊錶的結點中都只有乙個指示直接後繼的指標域,由此,從鍊錶的某個結點出發只能順指標往後尋查其他結點。若需要直接查詢結點的直接前驅,則需要先標記該結點,然後從表頭結點出發遍歷鍊錶。

為了克服單鏈表這種單向性的缺點,可利用雙鏈表。

雙鏈表的結點中有兩個指標域,其一指向直接後繼,另一指向直接前驅。

雙鏈表的基本實現與單鏈表差不多,唯一需要多注意的是每次對結點進行處理要同時考慮其前驅指標域和後繼指標域。

這裡稍微介紹一下迴圈雙鏈表。

迴圈雙鏈表的底層實現

mydoublenode 是這裡定義的迴圈雙鏈表的結點類(同時也是乙個只有乙個結點的迴圈雙鏈表)

package util;

public

class

mydoublenode

//增加結點

public

void

after

(mydoublenode node)

//下乙個結點

public mydoublenode next()

//上乙個結點

public mydoublenode pre()

//獲取當前結點的值

public

intgetdata()

}

簡單test:

package classify;

import util.mydoublenode;

public

class

doublelisttest

}

資料結構 2 鍊錶

填補那些模稜兩可的後知後覺 public class linkedlist public node e e public node override public string tostring private node dummyhead 虛擬頭節點 private int size 元素個數 p...

資料結構2 鍊錶

首先來說乙個問題,線性表和鍊錶的區別。線性表是n個資料元素的有限序列,複雜的線性表中,資料元素可以有若干個資料項構成乙個記錄。線性表可以有兩種表示方式,順序表示和鏈式表示。線性表的順序表示是用一組連續的記憶體儲存線性表的資料元素。而線性表的鏈式表示是用隨機的儲存單元來儲存線性表的元素,這種線性表就是...

資料結構 表之煉表

頭插法建立 尾插法建立 顯示 銷毀 include include using namespace std typedef int elemtype typedef struct lnode linklist void createlinklistf linklist l,elemtype a,in...