基本概念
什么是數(shù)據(jù)?
搞懂?dāng)?shù)據(jù)結(jié)構(gòu)前需先理解數(shù)據(jù)的概念是什么?本身是用于描述自然界客觀事物,站在計算機領(lǐng)域角度解讀則是程序操作的對象,具體指可以輸入到計算機里的數(shù)值、字符、符號、聲音、圖像、視頻等等,且可以被處理的信息統(tǒng)稱為數(shù)據(jù)。
通過歸納,以面向?qū)ο蟮木幊趟枷肟梢缘贸鲆粋€數(shù)據(jù)由4部分組成:
1、數(shù)據(jù)類:屬性相同的數(shù)據(jù)項的集合,例如:人、車、書等都可以稱之為數(shù)據(jù)類,它是用來描述自然界客觀事物的一種抽象描述;
2、數(shù)據(jù)對象:數(shù)據(jù)類的子集,比如:人這個數(shù)據(jù)類有個叫張三的人,描述張三各種信息的集合稱之為數(shù)據(jù)對象。它是數(shù)據(jù)中的個體,由數(shù)據(jù)項(屬性)組成,在程序中通常將其作為一個整體來處理。組成數(shù)據(jù)的基本單位,是數(shù)據(jù)集合的個體。在計算機程序中通常作為一個整體來處理,比如一條描述學(xué)生完整信息的數(shù)據(jù)記錄就是一個數(shù)據(jù)元素,在空間中某個點的三維坐標(biāo)也是一個數(shù)據(jù)元素,數(shù)據(jù)元素通常由若干個數(shù)據(jù)項組成,比如描述學(xué)生相關(guān)信息的姓名、學(xué)號等都是數(shù)據(jù)元素的數(shù)據(jù)項;三維坐標(biāo)系中的每個坐標(biāo)值也都是數(shù)據(jù)項。數(shù)據(jù)項
3、數(shù)據(jù)項(屬性):數(shù)據(jù)類的子集,比如:人有姓名、性別、年齡等,這些稱之為數(shù)據(jù)項。它具有原子性,在數(shù)據(jù)中是不可再分的最小單位。
4、數(shù)據(jù)結(jié)構(gòu):用來描述數(shù)據(jù)內(nèi)部的組織結(jié)構(gòu),接下來會詳細介紹到。
什么是數(shù)據(jù)結(jié)構(gòu)?
數(shù)據(jù)一詞+結(jié)構(gòu)一詞就構(gòu)成了數(shù)據(jù)結(jié)構(gòu),這個詞匯是計算機科學(xué)與計算機技術(shù)領(lǐng)域中廣泛使用的專業(yè)術(shù)語。根據(jù)字面意思來講:它是用來描述一個數(shù)據(jù)的內(nèi)部結(jié)構(gòu),即有哪些成分數(shù)據(jù),和成分數(shù)據(jù)的組織結(jié)構(gòu)。
下面以Javascript編程語言寫兩個簡單的數(shù)據(jù)結(jié)構(gòu)(僅從代碼角度幫助理解數(shù)據(jù)結(jié)構(gòu),而實際的數(shù)據(jù)結(jié)構(gòu)并非如下所示,在此只是為了方便理解上面的概念)。
// 數(shù)據(jù)結(jié)構(gòu)一
// 0-1的成分數(shù)據(jù)是Person,2-3的成分數(shù)據(jù)是Car
[
{name: "小明", age: 12, sex: "男"},
{name: "小紅", age: 12, sex: "女"},
{brand: "上海大眾", model: "cc", price: 100000},
{brand: "奧迪", model: "A8", price: 200000}
]
// 數(shù)據(jù)結(jié)構(gòu)二
// 從下面可以看出,相較于數(shù)據(jù)結(jié)構(gòu)一數(shù)據(jù)的組織結(jié)構(gòu)表達的更清晰,對象中分為兩個數(shù)組,一是person,二是car
{
person: [
{name: "小明", age: 12, sex: "男"},
{name: "小紅", age: 12, sex: "女"}
],
car: [
{brand: "上海大眾", model: "cc", price: 100000},
{brand: "奧迪", model: "A8", price: 200000}
]
}
從數(shù)據(jù)結(jié)構(gòu)一和數(shù)據(jù)結(jié)構(gòu)二中可以發(fā)現(xiàn)數(shù)據(jù)組織結(jié)構(gòu)不一樣,成分數(shù)據(jù)則是具有相同屬性的數(shù)據(jù),如:person和car。常見的數(shù)據(jù)結(jié)構(gòu)包含:線性表、棧、隊列、樹狀、圖狀。
基本概念講清楚后,補充一點,數(shù)據(jù)結(jié)構(gòu)是一門學(xué)科,主要有3方面的研發(fā)方向:一,數(shù)據(jù)的邏輯結(jié)構(gòu);二,數(shù)據(jù)物理存儲結(jié)構(gòu);三,如何操作數(shù)據(jù),也稱算法。在此強調(diào)一下算法一詞,算法的設(shè)計取決于數(shù)據(jù)的邏輯結(jié)構(gòu),算法的實現(xiàn)取決于物理存儲結(jié)構(gòu)。綜上所述,這門學(xué)科前兩個研究方向是數(shù)據(jù)基礎(chǔ),第三個研究方向是數(shù)據(jù)應(yīng)用。
數(shù)據(jù)的邏輯結(jié)構(gòu)和存儲結(jié)構(gòu)
數(shù)據(jù)結(jié)構(gòu)有邏輯上的數(shù)據(jù)結(jié)構(gòu)和物理存儲上的數(shù)據(jù)結(jié)構(gòu)之分。邏輯上的數(shù)據(jù)結(jié)構(gòu)反映成分數(shù)據(jù)之間的邏輯關(guān)系,而物理上的數(shù)據(jù)結(jié)構(gòu)反映成分數(shù)據(jù)在計算機內(nèi)部的存儲安排。數(shù)據(jù)結(jié)構(gòu)存在的意義是為了提高算法的效率,它通常有一組算法的集合相對應(yīng)。
邏輯結(jié)構(gòu)
按照組織結(jié)構(gòu),可以分為4類:
1、集合:每一個成分數(shù)據(jù)之間是沒有聯(lián)系的
2、線性結(jié)構(gòu):每一個成分數(shù)據(jù)前后兩個元素是有聯(lián)系的
3、樹形結(jié)構(gòu):成分數(shù)據(jù)的組織結(jié)構(gòu)可以看做是一個倒過來的樹
4、圖狀結(jié)構(gòu):其中成分數(shù)據(jù)可能于其他元素都有關(guān)聯(lián)

物理存儲結(jié)構(gòu)
數(shù)據(jù)在計算機內(nèi)存、寄存器、硬盤中的存儲形式,也可以分為4類:
1、順序:最為常見
2、鏈?zhǔn)剑鹤顬槌R?br>
3、索引
4、散列
數(shù)據(jù)的運算
數(shù)據(jù)的運算是在數(shù)據(jù)的邏輯結(jié)構(gòu)上定義的操作,它在數(shù)據(jù)的存儲結(jié)構(gòu)上實現(xiàn),算法的意義就是為了讓這些操作更加高效。常見的數(shù)據(jù)運算有5種操作:插入、修改、刪除、查找、排序。