用java實現簡單的鍊錶

2021-09-02 09:08:47 字數 1511 閱讀 9671

鍊錶不同於以前我們學過的佇列或陣列,它是非線性的,即不是在記憶體中連續儲存的。鍊錶可以理解成由很多結點組成,很多人會把鍊錶比喻為自行車的鏈條,這一點我覺得有點不怎麼適合因為鍊錶也可以是無序的比如張三有李四的**號碼王五也有李四**號碼,那麼張三要找王五就只需通過李四就可以了,他們可以是所在位置的不同,當然我這裡只是做了乙個比喻有可能不太妥當,我們一般將鍊錶的乙個結點分成兩個部分:data filed和pointer field(這些是作者沿用c裡的叫法),資料域用來儲存資料,域用後面的指標來存放下乙個結點的位址。 

下面我用乙個類來舉例我在這裡只實現的刪除和增加的是功能,為了讓**的簡潔我用了乙個內部類

public class linklist else

end=n;

count++;

} public void delete(int index)else if(n3==null)else

count--; }

// 獲得指定位置的元素值

public string get(int index)

private node getnode(int index)

int num=0;

node n=head;

while(numadd方法:

放入乙個節點,如果鍊錶中沒有節點就作為頭節點,如果有鍊錶中有節點,就將該節點作為尾節點放入。

delete方法:

這裡就需要做三次判斷,需要判斷鍊錶中只有乙個節點和兩個節點的時候,如果這裡不判斷當刪除的時候,他無法根據前後兩個節點來判斷你要刪除的是那個節點,第三種情況就簡單了。

下面我在簡單說話所鍊錶和陣列的區別(所說的區別也就是用在的場景不同罷了):

從邏輯結構來看

1. 陣列必須事先定義固定的長度(元素個數),不能適應資料動態地增減的情況。當資料增加時,可能超出原先定義的元素個數;當資料減少時,造成記憶體浪費;陣列可以根據下標直接訪問。

2. 鍊錶動態地進行儲存分配,可以適應資料動態地增減的情況,且可以方便地插入、刪除資料項。(陣列中插入、刪除資料項時,需要移動其它資料項,非常繁瑣)鍊錶必須根據next指標找到下乙個元素

從記憶體儲存來看。

(但鍊錶也有區分按鍊錶的組織形式分有

arraylist

和linklist

兩種。arraylist

內部其實是用陣列的形式實現鍊錶,比較適合鍊錶大小確定或較少對鍊錶進行增刪操作的情況,同時對每個鍊錶節點的訪問時間都是

constant

;而linklist

內部以乙個

list

實現鍊錶,比較適合需要頻繁對鍊錶進行操作的情況,對鍊錶節點的訪問時間與鍊錶長度有關

o(n)這裡需要具體問題集具體分析了。

1. (靜態)陣列從棧中分配空間, 對於程式設計師方便快速,但是自由度小

2. 鍊錶從堆中分配空間, 自由度大但是申請管理比較麻煩

從上面的比較可以看出,如果需要快速訪問資料,很少或不插入和刪除元素,就應該用陣列;相反, 如果需要經常插入和刪除元素就需要用鍊錶資料結構了。

java實現簡單鍊錶

鍊錶是由乙個個節點連線起來的。首先鍊錶的node類 為 public class node public node int value public void display 其次是鍊錶類,注意點已經寫在注釋 附上 public class linklist intlength int n 1 no...

java實現的簡單鍊錶

實現的簡單鍊錶 author zcl public class linkedlist public node string name,node next 新增乙個節點 param node public void addnode node node else public void updateno...

java實現的簡單鍊錶

實現的簡單鍊錶 author zcl public class linkedlist public node string name,node next 新增乙個節點 param node public void addnode node node else public void updateno...