數(shù)據(jù)結(jié)構(gòu)(一)--基礎(chǔ)概念

一、數(shù)據(jù)結(jié)構(gòu)概念

1. 數(shù)據(jù)類型

(1)原子類型:其值不可再分的數(shù)據(jù)類型。

(2)結(jié)構(gòu)類型:其值可以再分解成若干成分的數(shù)據(jù)類型。

(3)抽象數(shù)據(jù)類型:一個數(shù)學(xué)模型及定義在該數(shù)據(jù)模型上的一組操作。

2. 數(shù)據(jù)結(jié)構(gòu)

數(shù)據(jù)結(jié)構(gòu)是一組或多組存在特定關(guān)系的數(shù)據(jù)元素的集合。

(1)數(shù)據(jù)的邏輯結(jié)構(gòu)

數(shù)據(jù)的邏輯結(jié)構(gòu)分為線性結(jié)構(gòu)和非線性結(jié)構(gòu)。

集合:結(jié)構(gòu)中的數(shù)據(jù)元素除了同屬一個集合外,沒有任何關(guān)系。

線性結(jié)構(gòu):結(jié)構(gòu)中的數(shù)據(jù)元素只存在一對一的關(guān)系。

樹形結(jié)構(gòu):結(jié)構(gòu)中的數(shù)據(jù)元素存在一對多的關(guān)系。

網(wǎng)狀結(jié)構(gòu):結(jié)構(gòu)中的數(shù)據(jù)元素存在多對多的關(guān)系。

image.png

(2)數(shù)據(jù)的存儲結(jié)構(gòu)

存儲結(jié)構(gòu)是指數(shù)據(jù)結(jié)構(gòu)在計算機(jī)中的表示(映像、物理結(jié)構(gòu)),包括數(shù)據(jù)元素的表示和關(guān)系的表示。

順序存儲:把邏輯上相鄰的元素放在物理位置也相鄰的存儲單元中,元素的關(guān)系可以由存儲單元的鄰接關(guān)系來體現(xiàn),如數(shù)組。

優(yōu)點(diǎn):可以通過索引直接訪問任何位置的元素,不需要從頭遍歷,且每個元素占用最少的存儲空間,不會有指針或鏈接信息占用額外空間。

缺點(diǎn):只能使用相鄰的一整塊空間,會產(chǎn)生外部碎片。

鏈?zhǔn)酱鎯?/strong>:存儲元素時借助指示元素位置的指針來表示元素之間的邏輯關(guān)系,不需要存儲單元物理位置相鄰,如List。

優(yōu)點(diǎn):充分利用所有存儲單元,不會出現(xiàn)碎片。

缺點(diǎn):每個元素存儲指針占用額外空間,且必須順序存取。

索引存儲:在存儲元素時附加索引表,索引項形式為 [關(guān)鍵字,地址],常用于數(shù)據(jù)庫或文件系統(tǒng)。

優(yōu)點(diǎn):檢索速度快。

缺點(diǎn):索引表占用額外空間,增刪數(shù)據(jù)需要額外花時間修改索引表。

散列存儲:根據(jù)元素的關(guān)鍵詞找出元素的存儲地址(哈希存儲),如哈希表。

優(yōu)點(diǎn):增刪查操作快。

缺點(diǎn):哈希表占用額外的空間,有可能需要花時間處理哈希沖突。

二、算法

1. 算法特征

(1)有窮性:算法總在執(zhí)行有窮步之后結(jié)束,每一步都在有窮時間內(nèi)完成。

(2)確定性:算法每條指令有確切的含義,對于相同的輸入只能得出相同的輸出。

(3)可行性:算法中描述的操作都可以通過已經(jīng)實(shí)現(xiàn)的基本運(yùn)算執(zhí)行有限次實(shí)現(xiàn)。

(4)輸入:算法有零個或多個輸入。

(5)輸出:算法有零個或多個輸出。

2. 算法效率的度量

(1)時間復(fù)雜度:算法中基本運(yùn)算的執(zhí)行次數(shù)的數(shù)量級作為該算法的時間復(fù)雜度。

時間復(fù)雜度表示算法執(zhí)行所需的時間,它描述了算法的運(yùn)行時間與輸入數(shù)據(jù)規(guī)模之間的關(guān)系。時間復(fù)雜度通常用大O表示法(Big O notation)來表示,形式為O(f(n)),其中f(n)是輸入數(shù)據(jù)規(guī)模n的函數(shù)。

常見的時間復(fù)雜度:
O(1):常數(shù)時間復(fù)雜度,表示算法的執(zhí)行時間與輸入數(shù)據(jù)規(guī)模無關(guān)。
O(n):線性時間復(fù)雜度,表示算法的執(zhí)行時間與輸入數(shù)據(jù)規(guī)模成正比。
O(n^2):平方時間復(fù)雜度,表示算法的執(zhí)行時間與輸入數(shù)據(jù)規(guī)模的平方成正比。
O(log n):對數(shù)時間復(fù)雜度,表示算法的執(zhí)行時間與輸入數(shù)據(jù)規(guī)模的對數(shù)成正比。
O(n log n):線性對數(shù)時間復(fù)雜度,表示算法的執(zhí)行時間與輸入數(shù)據(jù)規(guī)模乘以其對數(shù)成正比。

image.png

(2)空間復(fù)雜度:該算法所需的存儲空間。

空間復(fù)雜度表示算法執(zhí)行所需的內(nèi)存空間,它描述了算法的存儲空間與輸入數(shù)據(jù)規(guī)模之間的關(guān)系。空間復(fù)雜度也通常用大O表示法來表示,形式為O(f(n)),其中f(n)是輸入數(shù)據(jù)規(guī)模n的函數(shù)。

常見的空間復(fù)雜度:
O(1):常數(shù)空間復(fù)雜度,表示算法的存儲空間與輸入數(shù)據(jù)規(guī)模無關(guān)。
O(n):線性空間復(fù)雜度,表示算法的存儲空間與輸入數(shù)據(jù)規(guī)模成正比。
O(n^2):平方空間復(fù)雜度,表示算法的存儲空間與輸入數(shù)據(jù)規(guī)模的平方成正比

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容