11 1 LinkList 鍊錶

2022-06-01 10:18:11 字數 2427 閱讀 5291

底層是由節點(靜態內部類)來進行儲存元素的,底層記憶體不連續,不需要擴容增刪元素效率較高,查詢元素效率較低 執行緒不安全

linkedlist類中有乙個內部私有類node,這個類就代表雙端鍊錶的節點node。這個類有三個屬性,分別是前驅節點,本節點的值,後繼結點。

原始碼中的實現是這樣的。

private

static

class node

}

注意這個節點的初始化方法,給定三個引數,分別前驅節點,本節點的值,後繼結點。這個方法將在linkedlist的實現中多次呼叫。

下圖是linkedlist內部結構的視覺化,能夠幫我們更好的理解linkedlist內部的結構。

//新增

39public

void

add(string str)

4051

else

//尾部節點

5260

61 size++;62}

63//

插入64

public

void insert(int

index,string str)

6571

7273

//判斷插入節點的位置

74//

插入的節點位置是頭節點且size為0

75//

在尾部進行新增節點

76if(index==size)

81//

新節點82 node node=new node(str, null, null

);83

//判斷插入頭節點但是已經有了頭節點

84//

size 不為0

85if(index==0)

8694

else

101//

最後會找到第index的節點no

102//

插入在no之前

103 no.prev.next=node; //

no前面的節點的next指向新節點

104 node.prev=no; //

新節點的next指向no

105 no.prev=node; //

no的prev指向新節點

106 node.next=no; //

新節點的next指向no

107}

108 size++;

109}

110//

下標越界問題

111public

void out(int

index)

112118

119}

120//

根據下標找到節點

121public node getnode(int

index)

122128

return

n;129

}130

//刪除----根據下標

131public

void remove(int

index)

132143

else

if(index==size-1)

149else

157 size--;

158}

159//

根據指定元素進行刪除

160public

void

remove(string str)

161167

}168

//找到元素第一次出現的座標

169public

intindexof(string str)

180 no=no.next;

181}

182return -1;

183184

}185

@override

186public

string tostring()

196 string s=sb.tostring();

197if(size>0)

198201

return s+"]";

202}

203 }

view code

參考:

LinkList鍊錶操作

以下的c 類linklist實現了線性鍊錶的一般操作。可以直接在其他的程式中直接建立它的物件,其中線性表中的資料在此為整型,具體應用的時候可以適當的修改,並可以在此基礎上繼續封裝特定的功能。標頭檔案 linklist.h typedef struct lnode lnode,plinklist cl...

鍊錶(LinkList) 單鏈表

一 鍊錶的基本概念 鍊錶是一種物理上不連續 非順序的儲存結構,資料元素之間通過指標關聯在一起。鍊錶的特點 1 空間開銷大 物理空間不連續 2 可以動態新增新的節點 3 查詢元素只能按順序查詢 二 單向鍊錶圖示 節點 class node 鍊錶 class linklist linklist void...

用Python實現鍊錶Linklist

在leetcode上面試著用python解題,但是遇到鍊錶 二叉樹什麼的,python就用不溜。在網上看了一些資料。完整的實現過程如下 class node next none data none def init self,nodedata self.data nodedata 乙個鍊錶資料結構,...