【數據結構】數組和鏈表

[TOC]html


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

文章轉載自: http://www.javashuo.com/article/p-ccfbfhgj-b.html數據結構


數組

數組是一種最經常使用的線性數據結構,裏面存放的元素的類型是同樣的,而且有序的。spa

數組

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

單向鏈表

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

單鏈表的示意圖以下: 表頭爲空,表頭的後繼節點是"節點10"(數據爲10的節點),"節點10"的後繼節點是"節點20"(數據爲10的節點),...blog

單鏈表刪除節點

刪除"節點30" 刪除以前:"節點20" 的後繼節點爲"節點30",而"節點30" 的後繼節點爲"節點40"。 刪除以後:"節點20" 的後繼節點爲"節點40"。內存

單鏈表添加節點

在"節點10"與"節點20"之間添加"節點15" 添加以前:"節點10" 的後繼節點爲"節點20"。 添加以後:"節點10" 的後繼節點爲"節點15",而"節點15" 的後繼節點爲"節點20"。get

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

雙向鏈表

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

雙鏈表的示意圖以下:

表頭爲空,表頭的後繼節點爲"節點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"。

簡單總結

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

鏈表:

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

數組:

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