導航:首頁 > 編程語言 > java數據結構鏈表

java數據結構鏈表

發布時間:2024-09-13 00:24:03

java怎麼用鏈表實現

在數據結構中經常看見的一個基本概念-鏈表。
鏈表是一種物理存儲單元上非連續、非順序的存儲結構,數據元素的邏輯順序是通過鏈表中的指針鏈接次序實現的。鏈表由一系列結點(鏈表中每一個元素稱為結點)組成,結點可以在運行時動態生成。每個結點包括兩個部分:一個是存儲數據元素的數據域,另一個是存儲下一個結點地址的指針域。
在Java中,對於鏈表的實現都是基於引用數據類型操作的。實現大致如下:
定義節點類Node,節點的概念很重要,一個鏈表是由各各節點連接在一起組成的。在節點類Node中定義節點內容及指向下一節點的引用,再增加一個添加節點的方法即可完成鏈表實現。
鏈表有很多種不同的類型:單向鏈表,雙向鏈表以及循環鏈表。在執行效率上,相比數組而言,鏈表插入快查找慢,開發中得根據實際業務使用。

㈡ JAVA數據結構有哪幾種

數組、棧 、隊列、鏈表、樹、堆 、圖、散列表 。

1:數組是計算機編程語言上,對於「Array」的中文稱呼,是用於儲存多個相同類型數據的集合。

2:棧是限定僅在表尾進行插入和刪除操作的線性表,棧者,存儲貨物或供旅客住宿的地方,可引申為倉庫、中轉站,引入到計算機領域里,就是指數據暫時存儲的地方,所以才有進棧、出棧的說法。

3:一種特殊的線性表,它只允許在表的前端進行刪除操作,而在表的後端進行插入操作。

4:鏈表,一種物理存儲單元上非連續、非順序的存儲結構,數據元素的邏輯順序是通過鏈表中的指針鏈接次序實現的。

5:哈希表,是根據關鍵碼值而直接進行訪問的數據結構。也就是說,它通過把關鍵碼值映射到表中一個位置來訪問記錄,以加快查找的速度。

㈢ Java集合中的基本數據結構

1、集合中三大數據結構

1.1數組

內存地址連續

可以通過下標的成員訪問,下標訪問的性能高

增刪操作有較大的性能消耗(需要動態擴容)

1.2鏈表(雙向鏈表)

靈活的空間要求,存儲空間不要求連續

不支持下標訪問,支持順序遍歷搜索

針對增刪操作找到對應的節點改變鏈表的頭尾指針指向即可,無需移動元數據存儲位置

1.3樹(Java中二叉樹特性)

某節點的左子樹節點僅包含小於該節點的值

某節點的右子樹節點僅包含大於該節點的值

節點必須是二叉樹

順序排列

存在問題:樹可以認為是介於數組和鏈表二者之間的一種數據結構,擁有較快的查詢速度同時擁有較快的插入和刪除速度。但是在樹出現極端或嚴重的不平衡情況下會導致效率低下

基於紅黑樹折中解決二叉樹不平衡帶來的效率低下問題

1.3.1紅黑樹

紅黑樹,Red-BlackTree[RBT]是一個自平衡(不是絕對平衡)的二叉查找樹(BST),樹上的每個節點需要遵循下面的規則

每個節點要麼是黑色,要麼是紅色

根節點為黑色

每個葉子節點(NIL)是黑色

不能存在兩個連續的紅色節點(紅色節點的兩個子節點必須是黑色)

任一節點到葉子節點的路徑包含相同數量的黑節點

紅黑樹通過什麼自平衡

左旋:以某個節點作為支點(旋轉節點),其右子節點變為旋轉節點的父節點,右子節點的左節點變為旋轉節點的右子節點,左子節點保持不變

右旋:以某個節點作為支點(旋轉節點),其左子節點變為旋轉節點的父節點,左子節點的右子節點變為旋轉節點的左子節點,右子節點保持不變

變色:節點的顏色由紅色變為黑色或者黑色變為紅色

紅黑樹插入場景

1、紅黑樹為空

1.1插入節點作為根節點並把節點設置為黑色

2、插入節點的父節點為黑節點

2.1直接插入

3、插入節點的父節點為紅節點

3.1叔叔節點存在且為紅節點

1、P節點和S節點設置為黑色

2、PP節點設置為紅色

3、PP設置為當前插入節點

4、再次重復上述步驟

3.2叔叔節點不存在或者叔叔節點為黑色

3.2.1P節點是PP節點的左節點

3.2.1.1插入節點是P節點的左節點

1、P設置為黑色

2、PP節點設置為紅色

3、PP節點右旋

3.2.1.2插入節點是P節點的右節點

1、P節點左旋

2、把P設置為插入節點(此時等於上面的場景)

3、PP節點右旋

3.2.2P節點是PP節點的右節點

3.2.2.1插入節點是P節點的右節點

1、P節點設置為黑色

2、PP節點設置為紅色

3、PP節點左旋

3.2.2.2插入節點是P節點的左節點

1、P節點右旋

2、將P設置為插入節點(此時等於上面場景)

3、PP節點左旋

PP節點左旋

3.2.2.2插入節點是P節點的左節點

1、P節點右旋

2、將P設置為插入節點(此時等於上面場景)

3、PP節點左旋

㈣ java中有哪些數據結構

數據結構:
①數組 (Array)
在程序設計中,為了處理方便, 把具有相同類型的若干變數按有序的形式組織起來。這些按序排列的同類數
據元素的集合稱為數組。在C語言中, 數組屬於構造數據類型。一個數組可以分解為多個數組元素,這些數組
元素可以是基本數據類型或是構造類型。因此按數組元素的類型不同,數組又可分為數值數組、字元數組、指
針數組、結構數組等各種類別。
②棧 (Stack)
棧是只能在某一端插入和刪除的特殊線性表。它按照先進後出的原則存儲數據,先進入的數據被壓入棧底,最後
的數據在棧頂,需要讀數據的時候從棧頂開始彈出數據(最後一個數據被第一個讀出來)。
③隊列 (Queue)
一種特殊的線性表,它只允許在表的前端(front)進行刪除操作,而在表的後端(rear)進行插入操作。進行
插入操作的端稱為隊尾,進行刪除操作的端稱為隊頭。隊列中沒有元素時,稱為空隊列。
④鏈表 (Linked List)
一種物理存儲單元上非連續、非順序的存儲結構,數據元素的邏輯順序是通過鏈表中的指針鏈接次序實現的。
鏈表由一系列結點(鏈表中每一個元素稱為結點)組成,結點可以在運行時動態生成。每個結點包括兩個部分:
一個是存儲數據元素的數據域,另一個是存儲下一個結點地址的指針域。
⑤樹 (Tree)
樹是包含n(n>0)個結點的有窮集合K,且在K中定義了一個關系N,N滿足 以下條件:
(1)有且僅有一個結點 k0,他對於關系N來說沒有前驅,稱K0為樹的根結點。簡稱為根(root)
(2)除K0外,k中的每個結點,對於關系N來說有且僅有一個前驅。
(3)K中各結點,對關系N來說可以有m個後繼(m>=0)。
⑥堆 (Heap)
在計算機科學中,堆是一種特殊的樹形數據結構,每個結點都有一個值。通常我們所說的堆的數據結構,是指
二叉堆。堆的特點是根結點的值最小(或最大),且根結點的兩個子樹也是一個堆。
⑦圖 (Graph)
圖是由結點的有窮集合V和邊的集合E組成。其中,為了與樹形結構加以區別,在圖結構中常常將結點稱為頂點,
邊是頂點的有序偶對,若兩個頂點之間存在一條邊,就表示這兩個頂點具有相鄰關系。
⑧散列表 (Hash)
若結構中存在關鍵字和K相等的記錄,則必定在f(K)的存儲位置上。由此,不需比較便可直接取得所查記錄。稱
這個對應關系f為散列函數(Hash function),按這個思想建立的表為散列表。
差不多我就知道這些了~

㈤ java問題,鏈表跟順序表到底有什麼不同順序表我知道,但是為什麼說鏈表讀取數據時要從頭開始,

接樓上:准確的來說,你的問題是一個數據結構上的問題.

首先你要區分一下物理上的存儲結構 與 邏輯上的數據結構

物理上的存儲結構

  • 鏈式存儲結構

  • 順序存儲結構

邏輯上的數據結構

  • 線性數據結構 :單鏈表 雙向鏈表 循環列表(棧 隊列 ...)

  • 樹:普通樹 特殊樹

  • 查找表 : 靜態查找表,動態查找表

  • 圖:有向圖 ...

任何邏輯上的數據結構要在計算機上表示時,都必須根據自己的需求選擇一種物理上的存儲結構,然後根據邏輯數據結構的特性進行存儲等等操作.

對於物理上的存儲結構而言

  • 順序存儲結構 : 只要知道基址地址,就可以通過數學計算出任一元素 的地址.

  • 鏈式存儲結構: 上下家不能越級聯系,你知道爸爸是誰,但是不知道爺爺是誰,想找爺爺只能通過爸爸.(下一個結點的地址存儲在上一個結點中)

這種特性是由於其物理實現決定的,目前暫時看沒有辦法改變.

回過頭來看你的問題中兩個關鍵的概念定義:

  • 鏈表:以鏈式存儲結構存儲的線性表叫做鏈表

  • 順序表:以順序存儲結構存儲的線性表叫做順序表

所以:

順序表可以隨即存取任一元素.而鏈表在絕大部分情況下都需要遍歷查找.

閱讀全文

與java數據結構鏈表相關的資料

熱點內容
單片機數碼管閃爍 瀏覽:953
有什麼閱讀小說免費的app 瀏覽:661
華潤電力是個什麼app 瀏覽:372
java與jni線程 瀏覽:202
c語言哈夫曼編碼壓縮 瀏覽:27
單片機零基礎入門 瀏覽:437
千鋒python3基礎視頻 瀏覽:578
linuxintel程序 瀏覽:977
光遇登陸伺服器連接失敗什麼意思 瀏覽:767
jd檢測手機新老介面源碼 瀏覽:126
java調用interface 瀏覽:1
解決點面之間是否存在聯系的演算法 瀏覽:272
如何架構雲伺服器 瀏覽:395
象山證券交易用什麼app 瀏覽:776
量價分析pdf 瀏覽:714
php如何調用js方法 瀏覽:743
網頁游戲在哪個文件夾 瀏覽:689
淘特怎麼付不了款伺服器出錯了 瀏覽:115
linux查看路由器 瀏覽:273
在d盤如何查找以k開頭的文件夾 瀏覽:158