野生碼農的計算機基礎探索之路。html
一直不明白數據,數據結構,數據類型,這些在講什麼? 對概念和本質都沒有認知。在邏輯上、抽象上、物理上? 這幾個又是怎麼進行區分,又表示什麼?git
數據是信息的載體,是描述客觀事物的數、字符、以及全部能輸入到計算機中,被計算機程序識別和處理的符號的集合。數據的本質是差別,每一種差別是一個值。數據的意義是用來對比。包含:數值性數據
和 非數值性數據
算法
數據結構
是計算機科學與技術領域經常使用的術語。它用來反映一個數據的內部構成,即一個數據由哪些成分數據構成,以什麼方式構成,呈什麼結構。邏輯上的數據結構反映成分數據之間的邏輯關係,物理上的數據結構反映成分數據在計算機內的存儲安排。數據結構是數據存在的形式。數據結構
數據結構,分爲數據的邏輯結構和物理結構函數
數據的邏輯結構:數據元素之間的邏輯關係 => 集合結構;線性結構;樹形結構;圖形結構ui
數據的物理結構:數據元素在計算機存儲器中是如何存儲的 => 順序存儲(存放在連續的內存地址中);鏈式存儲(數據經過指針指向下一個存儲地址,不必定存儲在連續的地址空間)設計
數據類型
數據是按照數據結構分類的,具備相同數據結構的數據屬同一類。同一類數據的全體稱爲數據類型。在程序設計高級語言中,數據類型用來講明一個數據在數據分類中的歸屬。它是數據的一種屬性。這個屬性限定了該數據的變化範圍。爲了解題的須要,根據數據結構的種類,高級語言定義了一系列的數據類型。不一樣的高級語言所定義的數據類型不盡相同。指針
數據類型是一個值的集合和定義在這個值上的一組操做的總稱。code
按照值的不一樣,高級程序設計語言中數據類型可分爲兩類:一類是非結構的原子類型,另外一類是結構類型。htm
抽象數據類型
抽象數據類型的含義可理解爲數據類型的進一步抽象。即把數據類型和數據類型上的運算捆在一塊兒,進行封裝。引入抽象數據類型的目的是把數據類型的表示和數據類型上運算的實現與這些數據類型和運算在程序中的引用隔開,使它們相互獨立。對於抽象數據類型的描述,除了必須描述它的數據結構外,還必須描述定義在它上面的運算(過程或函數)。抽象數據類型上定義的過程和函數以該抽象數據類型的數據所應具備的數據結構爲基礎。
抽象數據類型實際上就是對該數據結構的定義。由於它定義了一個數據的邏輯結構以及在此結構上的一組算法。
抽象數據類型只是在數據的邏輯結構上討論問題,與數據的存儲結構無關。
總體的概念以 WIKI 上爲準。
抽象數據類型
其中涉及 抽象數據結構, 數據結構的實現,數據的存儲結構, 數據的邏輯結構
參考:
計算機科學中有兩種常見的抽象:
procedural(functiona) abstraction: 過程抽象,指使用一個函數或方法而忽略它的具體實現。
data abstraction: 數據抽象,指數據類型的屬性(值和操做方法)與數據類型的具體實現分離。
經常使用術語定義
collection: 集合,指一組數據值,單個數據值之間沒有隱含的組織關係。
container: 容器,指存儲和組織一個集合的數據結構或 ADT。集合中的單個數據值稱爲容器的元素 (element),當容器中沒有元素時,稱容器爲空 (empty)。Python 中的容器例子有: string, tuple, list, dict, set。
sequence: 序列,是一種容器,該容器的元素按線性排列,而且每一個元素能經過其位置訪問(即經過下標訪問)。Python 中的序列例子: string, tuple, list。
sorted sequence: 有序序列,元素的位置基於每一個元素的先後元素的某種預約關係肯定。