[資料結構] 陣列與連結串列的優缺點和區別
概述
陣列 是將元素在記憶體中連續存放,由於每個元素佔用記憶體相同,可以通過下標迅速訪問陣列中任何元素。但是如果要在陣列中增加一個元素,需要移動大量元素,在記憶體中空出一個元素的空間,然後將要增加的元素放在其中。同樣的道理,如果想刪除一個元素,同樣需要移動大量元素去填掉被移動的元素。如果應用需要快速訪問資料,很少插入和刪除元素,就應該用陣列。
連結串列 中的元素在記憶體中不是順序儲存的,而是通過存在元素中的指標聯絡到一起,每個結點包括兩個部分:一個是儲存 資料元素 的 資料域,另一個是儲存下一個結點地址的 指標。
如果要訪問連結串列中一個元素,需要從第一個元素開始,一直找到需要的元素位置。但是增加和刪除一個元素對於連結串列資料結構就非常簡單了,只要修改元素中的指標就可以了。如果應用需要經常插入和刪除元素你就需要用連結串列
記憶體儲存區別
陣列從棧中分配空間, 對於程式設計師方便快速,但自由度小。
連結串列從堆中分配空間, 自由度大但申請管理比較麻煩.
邏輯結構區別
陣列必須事先定義固定的長度(元素個數),不能適應資料動態地增減的情況。當資料增加時,可能超出原先定義的元素個數;當資料減少時,造成記憶體浪費。
連結串列動態地進行儲存分配,可以適應資料動態地增減的情況,且可以方便地插入、刪除資料項。(陣列中插入、刪除資料項時,需要移動其它資料項)
總結
1、存取方式上,陣列可以順序存取或者隨機存取,而連結串列只能順序存取;
2、儲存位置上,陣列邏輯上相鄰的元素在物理儲存位置上也相鄰,而連結串列不一定;
3、儲存空間上,連結串列由於帶有指標域,儲存密度不如陣列大;
4、按序號查詢時,陣列可以隨機訪問,時間複雜度為O(1),而連結串列不支援隨機訪問,平均需要O(n);
5、按值查詢時,若陣列無序,陣列和連結串列時間複雜度均為O(1),但是當陣列有序時,可以採用折半查詢將時間複雜度降為O(logn);
6、插入和刪除時,陣列平均需要移動n/2個元素,而連結串列只需修改指標即可;
7、空間分配方面:
陣列在靜態儲存分配情形下,儲存元素數量受限制,動態儲存分配情形下,雖然儲存空間可以擴充,但需要移動大量元素,導致操作效率降低,而且如果記憶體中沒有更大塊連續儲存空間將導致分配失敗;
連結串列儲存的節點空間只在需要的時候申請分配,只要記憶體中有空間就可以分配,操作比較靈活高效;
相關推薦
[資料結構] 陣列與連結串列的優缺點和區別
概述 陣列 是將元素在記憶體中連續存放,由於每個元素佔用記憶體相同,可以通過下標迅速訪問陣列中任何元素。但是如果要在陣列中增加一個元素,需要移動大量元素,在記憶體中空出一個元素的空間,然後將要增加的元素放在其中。同樣的道理,如果想刪除一個元素,同樣需要移動大量元素去
線性結構 陣列與連結串列
線性結構 陣列與連結串列 線性結構 線性資料結構有兩端,有時被稱為左右,某些情況被稱為前後。你也可以稱為頂部和底部,名字都不重要。將兩個線性資料結構區分開的方法是新增和移除項的方式,特別是新增和移除項的位置。例如一些結構允許從一端新增項,另一些允許從另一端移除項。 陣列或列表 陣列(Array)是程式
java 陣列與連結串列的巢狀使用(陣列連結串列--資料結構)
用處:連結串列陣列一般用於在不借用資料庫的情況下,對於大量資料的臨時儲存,來實現快速查詢的功能。 巢狀實現思想:上一篇中已經講了連結串列的建立和操作,借用上一篇中的部分來進行說明。上一篇中的類LinkList 是連結串列類,類中有對連結串列的各種操作,要把連結串列和陣列聯絡
陣列與連結串列的優缺點和區別
1.陣列: 陣列是將元素在記憶體中連續存放,由於每個元素佔用記憶體相同,可以通過下標迅速訪問陣列中任何元素。但是如果要 在陣列中增加一個元素,需要移動大量元素,在記憶體中空出一個元素的空間,然後將要增
【資料結構】--1.連結串列的基本操作和雜湊表定義
C實現連結串列的基本操作 初始化 插入 刪除 雜湊表的定義 //連結串列的基本操作 初始化 插入 刪除 雜湊表的定義 #include<iostream> using namespace std; typedef struct Node { int
資料結構筆記1---連結串列與順序表
導讀 1.單鏈表(建立,插入,刪除,查詢(2),判空) 2.陣列線性表(建立,插入,刪除,查詢,判空,判滿) 3.迴圈連結串列(建立,插入,刪除,判空) 4.運用陣列線性表的串的替換暴力演算法 單鏈表 #include <iostrea
【資料結構】迴圈連結串列和非迴圈單鏈表的區別
注意:這裡的迴圈連結串列是以尾指標為起始。非迴圈單鏈表判斷結束的標誌為指標為空。而迴圈連結串列判斷結束的標誌是指標不是頭節點。在插入操作中,非迴圈單鏈表判斷迴圈結束是指標為空。若迴圈結束後,發現指標變為空,說明要求插入的位置不合理:位置大於Length+1。bool ins
陣列與連結串列的優缺點分析
陣列和連結串列是儲存資料的兩種不同的結構。他們各有各的優缺點。 陣列: 缺點:1.一旦陣列定義,則大小固定,無法修改陣列的大小。 2.陣列插入和刪除的
Redis系列(五):資料結構List雙向連結串列中基本操作操作命令和原始碼解析
1.介紹 Redis中List是通過ListNode構造的雙向連結串列。 特點: 1.雙端:獲取某個結點的前驅和後繼結點都是O(1) 2.無環:表頭的prev指標和表尾的next指標都指向NULL,對連結串列的訪問都是以NULL為終點 3.帶表頭指標和表尾指標:獲取表頭和表尾的複雜度都是O(1) 4.帶連結串
Redis系列(八):資料結構List雙向連結串列中阻塞版本之BLPOP、BRPOP和LINDEX、LINSERT、LRANGE命令詳解
1.BRPOP、BLPOP BLPOP: BLPOP 是阻塞式列表的彈出原語。 它是命令 LPOP 的阻塞版本,這是因為當給定列表內沒有任何元素可供彈出的時候, 連線將被 BLPOP 命令阻塞。 當給定多個 key 引數時,按引數 key 的先後順序依次檢查
字串資料結構實現(連結串列方式)
相較於陣列方式的實現,C語言我採用了單鏈表的方式實現,C++採用了雙鏈表的方式。毫無疑問,雙鏈表的效率肯定是要遠高於單鏈表的。這次支援中文字元的操作,這個實現的思路是,在節點類中新增兩個成員變數,一個用來存放char字元,一個用來存放wchar_t字元。關於兩者的相互轉換及輸出請參考 C語言
SDUTOJ-2054 資料結構實驗之連結串列九:雙向連結串列
題目連結 #include <iostream> #include <cstdlib> using namespace std; typedef int ElementType; typedef struct node { ElementType
SDUTOJ-3331 資料結構實驗之連結串列八:Farey序列
連結串列節點插入練習題 題目連結 #include <stdio.h> #include <cstdlib> using namespace std; typedef int ElementType; typedef struct node { Elemen
【資料結構】環形連結串列
給定一個連結串列,判斷連結串列中是否有環。 思路分析: 判斷連結串列是否帶環,實際上歸屬於快慢指標問題,快指標先進環,慢指標後進環,然後快指標和慢指標最終會在環裡面相遇,如果不會相遇,則表示不是迴圈連結串列,也就是說到頭了,即不帶環。 具體程式碼如下: /**
順序表(陣列)與連結串列的區別
相關文件 演算法和資料結構系列 學習演算法和資料結構:線性結構 順序表 順序表一般視為陣列,使用一組地址連續的儲存單元依次儲存資料元素 順序表具有以下特點: 長度固定,必須在記憶體分配之前確定陣列長度; 儲存空間連續,即允許隨機訪問任意元素; 資料
【資料結構】雙向連結串列的實現
文章目錄 LinkList.h LinkLish.c LinkList.h #ifndef __LINKLIST_H__ #define __LINKLIST_H__ #include <stdio.h>
資料結構-單向連結串列
package com.mzs.demo5; public class Node { private int data; private Node next; public Node(int data) { this.data = data; } public void
陣列與連結串列的區別
大致總結一下特點和區別,拿幾個人一起去看電影時坐座位為例。 陣列的特點 在記憶體中,陣列是一塊連續的區域。 拿上面的看電影來說,這幾個人在電影院必須坐在一起。 陣列需要預留空間,在使用前要先申請佔記憶體的大小,可能會浪費記憶體空間。 比如看電影時,為了
嚴蔚敏版資料結構——佇列(連結串列實現)
佇列有兩種表示方式,我們再看連結串列實現: 個人感覺佇列也就是連結串列的一種特殊表,如果前面的連結串列知識通關了這裡隨便看看記住佇列的遊戲規則就行了。還是和前面一樣,先要有頭結點,總體來說就是單鏈表的插刪。 這裡與順序佇列不同的是不需要判斷佇列是不是滿了,連結串列最大的特點是動態分配節點空間
資料結構實驗之連結串列一:順序建立連結串列(SDUT 2116)
Problem Description 輸入N個整數,按照輸入的順序建立單鏈表儲存,並遍歷所建立的單鏈表,輸出這些資料。 Input 第一行輸入整數的個數N; 第二行依次輸入每個整數。 Outp