1. 程式人生 > >陣列和連結串列的區別

陣列和連結串列的區別

大致總結一下特點和區別,拿幾個人一起去看電影時坐座位為例。

陣列的特點

  • 在記憶體中,陣列是一塊連續的區域。 拿上面的看電影來說,這幾個人在電影院必須坐在一起。
  • 陣列需要預留空間,在使用前要先申請佔記憶體的大小,可能會浪費記憶體空間。 比如看電影時,為了保證10個人能坐在一起,必須提前訂好10個連續的位置。這樣的好處就是能保證10個人可以在一起。但是這樣的缺點是,如果來的人不夠10個,那麼剩下的位置就浪費了。如果臨時有多來了個人,那麼10個就不夠用了,這時可能需要將第11個位置上的人挪走,或者是他們11個人重新去找一個11連坐的位置,效率都很低。如果沒有找到符合要求的作為,那麼就沒法坐了。
  • 插入資料和刪除資料效率低,插入資料時,這個位置後面的資料在記憶體中都要向後移。刪除資料時,這個資料後面的資料都要往前移動。 比如原來去了5個人,然後後來又去了一個人要坐在第三個位置上,那麼第三個到第五個都要往後移動一個位子,將第三個位置留給新來的人。 當這個人走了的時候,因為他們要連在一起的,所以他後面幾個人要往前移動一個位置,把這個空位補上。
  • 隨機讀取效率很高。因為陣列是連續的,知道每一個數據的記憶體地址,可以直接找到給地址的資料。
  • 並且不利於擴充套件,陣列定義的空間不夠時要重新定義陣列。

連結串列的特點

  • 在記憶體中可以存在任何地方,不要求連續。 在電影院幾個人可以隨便坐。
  • 每一個數據都儲存了下一個資料的記憶體地址,通過這個地址找到下一個資料。 第一個人知道第二個人的座位號,第二個人知道第三個人的座位號……
  • 增加資料和刪除資料很容易。 再來個人可以隨便坐,比如來了個人要做到第三個位置,那他只需要把自己的位置告訴第二個人,然後問第二個人拿到原來第三個人的位置就行了。其他人都不用動。
  • 查詢資料時效率低,因為不具有隨機訪問性,所以訪問某個位置的資料都要從第一個資料開始訪問,然後根據第一個資料儲存的下一個資料的地址找到第二個資料,以此類推。 要找到第三個人,必須從第一個人開始問起。
  • 不指定大小,擴充套件方便。連結串列大小不用定義,資料隨意增刪。

各自的優缺點

陣列的優點

  • 隨機訪問性強
  • 查詢速度快

陣列的缺點

  • 插入和刪除效率低
  • 可能浪費記憶體
  • 記憶體空間要求高,必須有足夠的連續記憶體空間。
  • 陣列大小固定,不能動態拓展

連結串列的優點

  • 插入刪除速度快
  • 記憶體利用率高,不會浪費記憶體
  • 大小沒有固定,拓展很靈活。

連結串列的缺點

  • 不能隨機查詢,必須從第一個開始遍歷,查詢效率低
- 陣列 連結串列
讀取 O(1) O(n)
插入 O(n) O(1)
刪除 O(n) O(1)

相關推薦

陣列連結串列區別

談到連結串列與陣列的區別,可以從幾個不同的角度來談, 首先從邏輯結構上說,兩者都是資料結構的一種,但存在區別, 陣列是申請的一塊連續的記憶體空間,並且是在編譯階段就要確定空間大小的,同時在執行階段是不允許改變的,所以它不能夠隨著需要的改變而增加或減少空間大小,所以當資料量大

陣列連結串列區別與優缺點

1.儲存    陣列儲存必須有提前宣告空間,因為陣列的儲存是連續的,沒有足夠的空間是無法儲存陣列的。  連結串列可以將資料儲存在不連續的空間中,從第一個空間開始,連結串列會記錄下下一個空間的位置,這樣就能檢索到整條連結串列了 2.查詢 根據陣列的特有屬性,只要找到第

資料結構:陣列連結串列區別以及各自的優缺點

原文地址 http://blog.csdn.net/qq_25806863/article/details/70607204 陣列和連結串列是兩種基本的資料結構,他們在記憶體儲存上的表現不一樣,所以也有各自的特點。 大致總結一下特點和區別,拿幾個人一起去看電影時坐座位為例。 陣列的特點

陣列連結串列集合的區別應用場景以及堆棧的區別

陣列和集合的區別: 1.陣列的長度固定的,超過長度時,只能建立一個新的陣列,並把舊的陣列的值傳進去方可; 而集合的長度是動態不固定的。 2.陣列的儲存型別是單一的,同一陣列只能儲存同一資料型別的資料。 而集合可以儲存多鍾資料型別的資料。 3.陣列只能通過下標來訪

陣列連結串列區別比較

1.陣列: 陣列是將元素在記憶體中連續存放,由於每個元素佔用記憶體相同,可以通過下標迅速訪問陣列中任何元素。但是如果要在陣列中增加一個元素,需要移動大量元素,在記憶體中空出一個元素的空間,然後將要增加的元素放在其中。同樣的道理,如果想刪除一個元素,同樣需要移動大量元素去填掉被移動的元素。

陣列連結串列區別

大致總結一下特點和區別,拿幾個人一起去看電影時坐座位為例。 陣列的特點 在記憶體中,陣列是一塊連續的區域。 拿上面的看電影來說,這幾個人在電影院必須坐在一起。 陣列需要預留空間,在使用前要先申請佔記憶體的大小,可能會浪費記憶體空間。 比如看電影時,為了

Java 陣列連結串列區別以及使用場景

陣列:是將元素在記憶體中連續儲存的;它的優點:因為資料是連續儲存的,記憶體地址連續,所以在查詢資料的時候效率比較高;它的缺點:在儲存之前,我們需要申請一塊連續的記憶體空間,並且在編譯的時候就必須確定好它的空間的大小。在執行的時候空間的大小是無法隨著你的需要進行增加和減少而改變的,當資料兩比較大的時候,有可能

資料結構:陣列連結串列區別陣列連結串列的優缺點 & 陣列連結串列的適用場景)

陣列和連結串列是兩種基本的資料結構,他們在記憶體儲存上的表現不一樣,所以也有各自的特點 陣列 一、陣列的特點 1.在記憶體中,陣列是一塊連續的區域 2.陣列需要預留空間

陣列連結串列區別及使用場景

學習一門語言我們基本都會用到陣列和連結串列,那麼這兩種結構肯定是有各自的優缺點的,俗話說沒有對比就沒有傷害哈(),不管是一個什麼東西都 是如此,接下來我就來分析分析他們各自的特點(沒有分析到位的話不要見怪哈,請盡情下評論區留言,一起交流交流) 陣列:我們知道不管是一維陣列還是二維陣列培訓它們在記憶體裡面的

陣列連結串列區別優缺點總結!

陣列和連結串列是兩種基本的資料結構,他們在記憶體儲存上的表現不一樣,所以也有各自的特點。 連結串列中各結點在記憶體中的存放位置是任意的。  連結串列與陣列的主要區別 (1)陣列的元素個數是固定的,而組成連結串列的結點個數可按需要增減; (2)陣列元素的存諸單元在陣列

Java基礎--陣列連結串列區別

1、陣列                  陣列處理一組資料型別相同的資料,但不允許動態定義陣列的大小,即在使用陣列之前必須確定陣列的大小。而在實際應用中,使用者使用陣列之前有時無法準確確定陣列

陣列連結串列與棧佇列之間的關係及堆棧之間的關係

本屌最近在學習資料結構過程中,由於連續看了陣列,棧,佇列,連結串列等,一時混雜,下面摘取參考資料,供自己學習使用。 第一部分:介紹了資料儲存結構和資料結構的區別,以及連結串列和陣列的差異。 第二部分:介紹了堆和棧的區別。 (1)資料儲存結構:計算機的一個概念,描述資料在計算機中儲存方式;常用

演算法總結-陣列連結串列

1 連結串列 Dummy Node的應用 K組翻轉連結串列 http://www.lintcode.com/zh-cn/problem/reverse-nodes-in-k-group/ 連結串列劃分 http://www.lintcode.com/zh-cn/probl

資料結構之——陣列連結串列

1. 陣列 1.1 陣列為什麼從零編號? 陣列名代表陣列的首地址,陣列的下標其實代表陣列中某個元素相對首地址的偏移量,陣列的第一個元素是零偏移,因此從 0 開始。 上面其實也只是一個解釋, C 語言設計者用零開始編號,後來的各種語言也便紛紛效仿,因此就形成了這個習慣。 1

一元多項式求和的兩種實現(陣列連結串列

一元多項式求和一般都是有兩種實現方式,小編下面就附上我對這兩種方式的理解和實現程式碼。 1.陣列實現。這種方式實現一元多項式加法,是把陣列下標當做一元多項式的指數,在陣列中存放係數。這種方式在實現一元多項是加法是通過遍歷陣列下標來獲取指數資訊,通過指數資訊將係數進行相加。利用陣列在實現一元多項式

C++實現陣列連結串列的排序演算法

OK,我們經常會用到排序演算法。那麼,常用的排序演算法,除了使用陣列之外,用連結串列又該如何處理呢?下面我們來做個對比: //使用插入排序對陣列進行排序 int *get_order(int *num, int length) { for(int eiter = 1; eiter <

陣列連結串列

陣列是申請的一塊連續的記憶體空間,並且在編譯階段就要確定空間大小的,同時執行階段是不允許改變的,意味著所有待辦事項在記憶體中都是相連的(緊靠在一起的)。 連結串列是動態申請的記憶體空間,現用現申,比陣列靈活。 當同時讀取所有元素時,連結串列的效率高,讀第一個,讀第二個。

陣列連結串列的例項講解——以Facebook為例

陣列支援隨機訪問,而連結串列只能順序訪問。那在實際使用中什麼樣的場合下該使用陣列,或者連結串列呢? 1、假設你要編寫一個記賬的應用程式。包含買雜貨、看電影和交會費。你每天都將記錄所有的支出,並在月底統計支出,算算當月花了多少錢。因此,你執行的插入操作很多,讀取操作很少,該使用陣列還是連

基於陣列連結串列兩種方式實現棧

棧是一種先進後出的資料結構,在實際程式設計棧有很廣泛的用處,Java棧已經幫我們實現好了stack類。 實現棧的兩種方式,基於陣列實現和基於連結串列實現。 1.stack介面 public interface StackADT { //入棧操作 public voi

使用陣列連結串列的方式實現棧

使用 陣列和連結串列 的方式實現 棧 陣列實現棧: public class Stack<Item> implements Iterable<Item> { pri