一開始的堅持總是容易的驹溃,因為熱血還未退卻,激情仍在燃燒延曙,所以趁著這股勁豌鹤,本系列的第一篇開始了!
開始后續(xù)真正數(shù)據(jù)結(jié)構(gòu)和算法的學(xué)習(xí)之前枝缔,需要先弄清楚一些簡單的概念布疙,比如數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)類型及抽象數(shù)據(jù)類型愿卸。
數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)類型
計算機是處理數(shù)據(jù)的機器灵临,而數(shù)據(jù)是信息的載體,是描述客觀事物的數(shù)趴荸、字符儒溉、以及所有能輸入到計算機中,被計算機程序識別和處理的符號的集合发钝。
在第 0 篇中提到顿涣,根據(jù)維基百科:數(shù)據(jù)結(jié)構(gòu) (data structure) 是計算機中存儲波闹、組織數(shù)據(jù)的方式。嚴(yán)老師在《數(shù)據(jù)結(jié)構(gòu)》中闡述的:
- 數(shù)據(jù)結(jié)構(gòu):是相互直接存在一種或多種特定關(guān)系的數(shù)據(jù)元素的集合涛碑,包括邏輯結(jié)構(gòu)和物理結(jié)構(gòu)精堕;
- 數(shù)據(jù)類型:是一個值的集合和定義在這個值集上的一組操作的總稱;
- 抽象數(shù)據(jù)類型:是指一個數(shù)學(xué)模型以及定義在該模型上的一組操作蒲障;
再擴展一下歹篓,參照這篇 博文
數(shù)據(jù)結(jié)構(gòu):
是用來反映一個數(shù)據(jù)的內(nèi)部構(gòu)成,即一個數(shù)據(jù)由哪些成分?jǐn)?shù)據(jù)構(gòu)成晌涕,以什么方式構(gòu)成滋捶,呈什么結(jié)構(gòu)痛悯。邏輯上的數(shù)據(jù)結(jié)構(gòu)反映成分?jǐn)?shù)據(jù)之間的邏輯關(guān)系余黎,物理上的數(shù)據(jù)結(jié)構(gòu)反映成分?jǐn)?shù)據(jù)在計算機內(nèi)的存儲安排。數(shù)據(jù)結(jié)構(gòu)是數(shù)據(jù)存在的形式载萌。
數(shù)據(jù)結(jié)構(gòu)惧财,分為數(shù)據(jù)的邏輯結(jié)構(gòu)和物理結(jié)構(gòu)
數(shù)據(jù)的邏輯結(jié)構(gòu):數(shù)據(jù)元素之間的邏輯關(guān)系 => 集合結(jié)構(gòu);線性結(jié)構(gòu)扭仁;樹形結(jié)構(gòu)垮衷;圖形結(jié)構(gòu)
數(shù)據(jù)的物理結(jié)構(gòu):數(shù)據(jù)元素在計算機存儲器中是如何存儲的 => 順序存儲(存放在連續(xù)的內(nèi)存地址中);鏈?zhǔn)酱鎯Γ〝?shù)據(jù)通過指針指向下一個存儲地址乖坠,不一定存儲在連續(xù)的地址空間)
數(shù)據(jù)類型:
數(shù)據(jù)是按照數(shù)據(jù)結(jié)構(gòu)分類的搀突,具有相同數(shù)據(jù)結(jié)構(gòu)的數(shù)據(jù)屬同一類。同一類數(shù)據(jù)的全體稱為數(shù)據(jù)類型熊泵。在程序設(shè)計高級語言中仰迁,數(shù)據(jù)類型用來說明一個數(shù)據(jù)在數(shù)據(jù)分類中的歸屬。它是數(shù)據(jù)的一種屬性顽分。這個屬性限定了該數(shù)據(jù)的變化范圍徐许。為了解題的需要,根據(jù)數(shù)據(jù)結(jié)構(gòu)的種類卒蘸,高級語言定義了一系列的數(shù)據(jù)類型雌隅。不同的高級語言所定義的數(shù)據(jù)類型不盡相同。
數(shù)據(jù)類型是一個值的集合和定義在這個值上的一組操作的總稱缸沃。
按照值的不同恰起,高級程序設(shè)計語言中數(shù)據(jù)類型可分為兩類:一類是非結(jié)構(gòu)的原子類型,另一類是結(jié)構(gòu)類型趾牧。
抽象數(shù)據(jù)類型
抽象數(shù)據(jù)類型的含義可理解為數(shù)據(jù)類型的進一步抽象检盼。即把數(shù)據(jù)類型和數(shù)據(jù)類型上的運算捆在一起,進行封裝武氓。引入抽象數(shù)據(jù)類型的目的是把數(shù)據(jù)類型的表示和數(shù)據(jù)類型上運算的實現(xiàn)與這些數(shù)據(jù)類型和運算在程序中的引用隔開梯皿,使它們相互獨立仇箱。對于抽象數(shù)據(jù)類型的描述,除了必須描述它的數(shù)據(jù)結(jié)構(gòu)外东羹,還必須描述定義在它上面的運算(過程或函數(shù))剂桥。抽象數(shù)據(jù)類型上定義的過程和函數(shù)以該抽象數(shù)據(jù)類型的數(shù)據(jù)所應(yīng)具有的數(shù)據(jù)結(jié)構(gòu)為基礎(chǔ)。
抽象數(shù)據(jù)類型實際上就是對該數(shù)據(jù)結(jié)構(gòu)的定義属提。因為它定義了一個數(shù)據(jù)的邏輯結(jié)構(gòu)以及在此結(jié)構(gòu)上的一組算法权逗。
抽象數(shù)據(jù)類型只是在數(shù)據(jù)的邏輯結(jié)構(gòu)上討論問題,與數(shù)據(jù)的存儲結(jié)構(gòu)無關(guān)冤议。
計算機科學(xué)中有兩種常見的抽象:
procedural(functiona) abstraction: 過程抽象斟薇,指使用一個函數(shù)或方法而忽略它的具體實現(xiàn)。
data abstraction: 數(shù)據(jù)抽象恕酸,指數(shù)據(jù)類型的屬性(值和操作方法)與數(shù)據(jù)類型的具體實現(xiàn)分離堪滨。
簡言之,數(shù)據(jù)結(jié)構(gòu)是數(shù)據(jù)儲存及邏輯的具體表現(xiàn)和實現(xiàn)方式蕊温,它的目標(biāo)是為了高效地儲存和檢索數(shù)據(jù)袱箱;而抽象數(shù)據(jù)類型是數(shù)據(jù)類型的抽象,它是通過其上的可執(zhí)行的操作以及這些操作的效果的數(shù)學(xué)約束的間接定義义矛。
數(shù)據(jù)結(jié)構(gòu)和抽象數(shù)據(jù)類型的一些典型例子:
Voilà发笔,這就是本篇的全部內(nèi)容了,歡迎各位留言斧正凉翻!