【數據結構】數組和鏈表



線性表是一種線性結構,它是具有相同類型的n(n≥0)個數據元素組成的有限序列。本文先介紹線性表的幾個基本組成部分:數組、單向鏈表、雙向鏈表;隨后給出雙向鏈表的Java語言的實現。

文章轉載自: https://www.cnblogs.com/skywang12345/p/3561803.html


數組

數組是一種最常用的線性數據結構,里面存放的元素的類型是一樣的,並且有序的。

數組

數組的特點是:數據是連續的;隨機訪問速度快。對於Java而言,Collection集合中提供了ArrayList和Vector用於數組這種數據結構的實現。

單向鏈表

單向鏈表(單鏈表)是鏈表的一種,它由節點組成,每個節點都包含下一個節點的指針。

單鏈表的示意圖如下:

表頭為空,表頭的后繼節點是"節點10"(數據為10的節點),"節點10"的后繼節點是"節點20"(數據為10的節點),...

單鏈表刪除節點

刪除"節點30"
刪除之前:"節點20" 的后繼節點為"節點30",而"節點30" 的后繼節點為"節點40"。
刪除之后:"節點20" 的后繼節點為"節點40"。

單鏈表添加節點

在"節點10"與"節點20"之間添加"節點15"
添加之前:"節點10" 的后繼節點為"節點20"。
添加之后:"節點10" 的后繼節點為"節點15",而"節點15" 的后繼節點為"節點20"。

單鏈表的特點是:節點的鏈接方向是單向的;相對於數組來說,單鏈表的的隨機訪問速度較慢,但是單鏈表刪除/添加數據的效率很高。

雙向鏈表

雙向鏈表(雙鏈表)是鏈表的一種。和單鏈表一樣,雙鏈表也是由節點組成,它的每個數據結點中都有兩個指針,分別指向直接后繼和直接前驅。所以,從雙向鏈表中的任意一個結點開始,都可以很方便地訪問它的前驅結點和后繼結點。一般我們都構造雙向循環鏈表。

雙鏈表的示意圖如下:

表頭為空,表頭的后繼節點為"節點10"(數據為10的節點);"節點10"的后繼節點是"節點20"(數據為10的節點),"節點20"的前繼節點是"節點10";"節點20"的后繼節點是"節點30","節點30"的前繼節點是"節點20";...;末尾節點的后繼節點是表頭。

雙鏈表刪除節點

刪除"節點30"
刪除之前:"節點20"的后繼節點為"節點30","節點30" 的前繼節點為"節點20"。"節點30"的后繼節點為"節點40","節點40" 的前繼節點為"節點30"。
刪除之后:"節點20"的后繼節點為"節點40","節點40" 的前繼節點為"節點20"。

雙鏈表添加節點


在"節點10"與"節點20"之間添加"節點15"
添加之前:"節點10"的后繼節點為"節點20","節點20" 的前繼節點為"節點10"。
添加之后:"節點10"的后繼節點為"節點15","節點15" 的前繼節點為"節點10"。"節點15"的后繼節點為"節點20","節點20" 的前繼節點為"節點15"。

簡單總結

數組和鏈表是兩種常見的線性數據結構。他們各自的優缺點如下:

鏈表:

  • 插入刪除速度快
  • 內存利用率高,不會浪費內存
  • 大小沒有固定,拓展很靈活
  • 不能隨機查找,必須從第一個開始遍歷,查找效率低

數組:

  • 隨機訪問性強,查找速度快
  • 插入和刪除效率低
  • 內存空間要求高,必須有足夠的連續內存空間,可能浪費內存
  • 數組大小固定,不能動態拓展


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM