資料結構與演算法 單鏈表

2021-10-22 01:18:23 字數 2625 閱讀 9811

鍊錶是有序的列表,但是它在記憶體中是儲存如下

鍊錶是以節點的方式來儲存的

鍊錶的各個節點不一定是連續儲存的

鍊錶分帶頭結點的鍊錶和不帶頭結點的鍊錶

新增先建立乙個 head 頭結點,作用就是表示單鏈表的頭

後面我們每新增乙個結點,就直接加入到鍊錶的最後

遍歷:通過乙個輔助變數,幫助來遍歷整個鍊錶

第一種方式:給鍊錶新增結點時,直接新增到鍊錶的尾部

第二種方式:新增結點,根據結點編號將結點插入到指定位置

1、定義乙個結點類(heronode),每個類物件都是乙個鍊錶的結點

class

heronode

// 重寫tostring方法

@override

public string tostring()

}

2、構建乙個單鏈表 singlelinkedlist

class

singlelinkedlist

2.1、在單鏈表中新增結點

public

void

add(heronode heronode)

// 如果沒有找到最後,就將 temp後移

temp = temp.next;

}// 當退出 while 迴圈的時候,temp 就指向了鍊錶的最後

// 將最後這個節點的 next 指向新的節點

temp.next = heronode;

}

3、列印出鍊錶

public

void

list()

// 因為頭節點,不能動,因此我們需要乙個輔助變數

heronode temp = head.next;

while

(true

)// 輸出節點的資訊

system.out.

println

(temp)

; temp = temp.next;

}}

4、進行測試

public

static

void

main

(string[

] args)

步驟:

首先找到新新增的結點的位置,是通過輔助變數(temp),通過遍歷來儲存

新的結點.next = temp.next

將 temp.next = 新的結點

新增規則:

因為頭節點不能動,因此我們還需要乙個輔助指標來幫我們找到新增的位置

待插入的位置應該是在輔助變數結點 temp 之後,temp.next 之前

寫乙個addbyorder的方法

public

void

addbyorder

(heronode heronode)

if(temp.next.no > heronode.no)

if(temp.next.no == heronode.no)

temp = temp.next;

// 後移,相當於在遍歷當前的鍊錶}if

(flag)

else

}

注意點:

判斷 temp 是不是在最後乙個結點

判斷待插入的結點是不是已經存在了,如果存在了輸出已經存在

修改結點通過結點的編號來修改,但是結點的編號是不可以改變的

public

void

update

(heronode newheronode)

// 找到需要修改的節點,根據 no 編號

// 定義乙個輔助變數

heronode temp = head.next;

// 首先指向的 0 號節點

boolean flag =

false

;while

(true)if

(temp.no == newheronode.no)

temp = temp.next;

}// 根據 flag

if(flag)

else

}

思路:

head 不能用,找乙個輔助結點 temp 用來指向待刪除的前乙個結點

在進行比較的時候是temp.next 與 要刪除的結點的 編號(no) 進行比較

public

void

del(

int no)

if(temp.next.no == no)

temp = temp.next;

}// 判斷 flag

if(flag)

else

}

單鏈表(演算法與資料結構)

鍊錶 單鏈表 為每個結點新增1個指標域,每個結點包括兩個域 資料域 存放元素本身資訊 指標域 存放後繼結點的儲存位置 指向鍊錶中第乙個結點的指標,稱為這個鍊錶的頭指標。最後乙個元素的指標不指向任何結點,稱為空指標,圖示中用 表示,在演算法中用 null 表示 帶頭結點的單鏈表 頭結點 可以不存資訊,...

資料結構與演算法 單鏈表

單鏈表的建立 1.建立乙個head頭節點,作用就是表示單鏈表的頭 2.後面我們每新增乙個節點,就直接加入鍊錶的最後 定義heronode,每個heronode物件就是乙個節點 class heronode 為了顯示方法,重新tostring public string tostring 定義sing...

資料結構與演算法 單鏈表(一)

單鏈表的頭插法,插入時就是逆序。insertlist 還不完善。include include define error 0 define ok 1 typedef int status typedef int elemtype typedef struct nodenode typedef str...