線性表是最基本、應用最廣泛的一種資料結構。
線性表的儲存結構是指 為線性表所開闢的計算機儲存空間以及採用的程式實現方法,其本質是邏輯結構到物理結構(儲存結構)的對映。
線性表的儲存結構主要分為兩類:
1、定長的順序儲存結構,簡稱順序表
2、變長的線性儲存結構,簡稱鍊錶(亦稱鏈式儲存結構)
順序錶鏈表
定義順序儲存
將線性表的所有資料元素,按其邏輯順序依次儲存在一組連續的記憶體單元中,
用這種儲存形式儲存的線性表,稱為線性表
鏈結儲存
通過一組位址任意的儲存單元來儲存線性表中的資料元素,這些儲存單元可以是連續的,
也可以是不連續的,用這種儲存形式儲存的線性表,稱為鍊錶
建立通過建立陣列來建立,順序表中的每個資料元素按其順序有唯一的索引值,
又稱下標值,可以方便地訪問資料元素內容
從空表開始,每讀入乙個資料元素就申請乙個相應的儲存單元,對於每乙個資料元素ai,
除了存放資料元素自身的資料資訊外,還需要乙個存放其直接後繼ai+1的儲存位址,
其中存放自身資料的data稱為資料域,存放直接後繼位址的next稱為指標域,這兩部分構成乙個「結點」。
鍊錶正是通過每乙個結點的指標域,將線性表中的結點按其邏輯順序依次連線在一起的
記憶體分配方式
(基於空間考慮)
靜態分配。程式執行前必須明確規定儲存規模
動態分配。無需預先估計儲存規模,可根據需要隨時申請動態分配記憶體。
儲存密度
(基於空間考慮)
為1。易於事先確定其大小時,宜採用順序表作為儲存結構
<1。指標域佔了部分儲存量
訪問方法
(基於時間考慮)
隨機訪問結構。對錶中任一結點都可在o(1)時間內直接取得。
如果線性表的操作主要是進行查詢,很少做插入和刪除操作,
應採用順序表作為儲存結構為宜
順序訪問結構。
鍊錶中的結點需從頭指標起,順著鍊錶掃瞄才能取得,其時間複雜度為o(n)
插入、刪除操作
(基於時間考慮)
在順序表中進行插入和刪除,平均要移動表中近一半的結點,
尤其是當每個結點的資訊量較大時,移動結點的時間開銷就相當可觀了,
其時間複雜度為o(n)
在鍊錶中的任何位置上進行插入和刪除,都只需要修改指標。
對於頻繁進行插入和刪除的線性表,宜採用鍊錶作為儲存結構。
如果表的插入和刪除主要發生在表的首尾兩端,則最好採用尾指標表示的單迴圈鍊錶。
儲存密度:結點資料本身所佔的儲存量和整個結點結構所佔的儲存量之比
即儲存密度 = (結點資料本身所佔的儲存量)/(結點結構所佔的儲存總量)、
儲存密度越大,則儲存空間的利用率就越高
共同學習,共同進步,若有補充,歡迎指出,謝謝!
mysql 線性表 資料結構之線性表
概要 參考 大話資料結構 把常用的基本資料結構梳理一下。線性表定義 線性表 list 零個或多個資料元素的有限序列。若將線性表記為 a 1,cdots,a a i,a cdots,a n 則表中 a 領先於 a i a i 領先於 a 稱 a 是 a i 的直接前驅元素,a 是 a i 的直接後繼元...
資料結構之線性表
從現在開始,我們開始討論如何實現一些常用的資料結構和其中的一些經典演算法.等把資料結構講完了.我可能會繼續討論vc 的程式設計只是以及vs平台下的c c 開發等等.呵呵.我們進入正題吧.我在這裡就只實現線性表的連表結構.當然了,這裡實際上包含了好多知識.我希望大家在引用的時候.一定要領悟裡面的一些變...
資料結構之線性表
線性表是具有相同特性的資料元素的乙個有限序列。該序列中所含元素的個數叫做線性表的長度,用n表示,n 0。當n 0時,表示線性表是乙個空表,即表中不包含任何元素。設序列中第i i表示位序 個元素為ai 1 i n 線性表的一般表示為 a1,a2,ai,ai 1,an include include d...