Hello,數據結構

也許從這以後,慢慢地你們中的一些人會開始把你們崇拜的對象,從帥哥美女、什麼“哥”什麼“姐”們,轉移到這些大鬍子或者禿頂的老頭身上,那我就非常欣慰了。——《大話數據結構》作者:程傑

什麼是數據結構

數據:

是信息的載體,是描述客觀事物屬性的數、字符以及所有能輸入到計算機中並被計算機程序識別和處理的符號的集合。

我的理解:你的姓名、身高、年齡、存款等,就是數據。

數據元素:

是數據的基本單位,通常作爲一個整體進行考慮和處理。
一個數據元素可由若干個數據項組成,數據項是構成數據元素的不可分割的最小單位。例如,學生記錄就是一個數據元素,它由學號、姓名、性別等數據項組成。

我的理解:就單單“姓名”這一個項目,就是數據元素。

數據對象:

數據對象是具有相同性質的數據元素的集合,是數據的一個子集。

我的理解:你所有認識人的單單“姓名”這一個項,就是一個數據對象。

數據類型:

是一個值的集合和定義在此集合上一組操作的總稱。

數據類型的種類:

  1. 原子類型:其值不可再分的數據類型。
  2. 結構類型:其值可以再分解爲若千成分(分量)的數據類型。
  3. 抽象數據類型:抽象數據組織和與之相關的操作。

抽象數據類型:

抽象數據類型(ADT)是指一個數學模型以及定義在該模型上的一組操作。
用(數據對象、 數據關係、基本操作集)這樣的三元組來表示抽象數據類型。

我的理解:對於你所認識的所有人,對於每個人的年齡,你設計一個函數來求平均值,這就是一種抽象的數據類型。我在初學時,直接把抽象數據類型(Abstract Data Type)看作是一個函數。

數據結構:

這種數據元素相互之間的關係稱爲結構(structure)。

  • 數據結構是相互之間存在一種或多種特定關係的數據元素的集合。
  • 數據結構包括三方面的內容:邏輯結構、存儲結構和數據的運算。
  • 數據的邏輯結構和存儲結構是密不可分的兩個方面,一個算法的設計取決於所選定的邏輯結構,而算法的實現依賴於所釆用的存儲結構。

我的理解:見識過修房子吧?先由鋼筋、混泥土、磚塊可以修成無數巧妙絕倫的房舍,這就是一種結構。其中的鋼筋、混泥土、磚塊就是數據元素;

數據的四大邏輯結構

總共就四種分類:

  1. 線性結構中的數據元素之間只存在一對一的關係。例如,數組、鏈表、棧、隊列。
  2. 集合結構中的數據元素之間除了 “同屬於一個集合”的關係外,別無其他關係。例如,你屬於你們班。
  3. 樹形結構中的數據元素之間存在一對多的關係。例如,你家的家族族譜。
  4. 圖狀結構中的數據元素之間存在多對多的關係。例如,你從香港到北京,有多重路線,要經過很多地方。

數據的四大存儲結構

定義:

數據結構在計算機內存中的表示(又稱映像),也稱物理結構。它包括數據元素的表示和關係的表示。

我的理解:你想保存所有你認識的人的信息,你想通過什麼方式保存下來呢?

數據的存儲結構主要有:順序存儲、鏈式存儲、索引存儲和散列存儲。

1) 順序存儲: 把邏輯上相鄰的元素存儲在物理位置上也相鄰的存儲單元裏,元素之間的關係由存儲單元的鄰接關係來體現。其優點是可以實現隨機存取,每個元素佔用最少的存儲空間;缺點是隻能使用相鄰的一整塊存儲單元,因此可能產生較多的外部碎片。

2) 鏈接存儲: 用指針表示元素之間的邏輯關係。其優點是不會出現碎片現象,充分利用所有存儲單元;缺點是每個元素因存儲指針而佔用額外的存儲空間,並且只能實現順序存取。

3) 索引存儲: 在存儲元素信息的同時,還建立附加的索引表。索引表中的每一項稱爲索引項,索引項的一般形式是:(關鍵字,地址)。其優點是檢索速度快;缺點是增加了附加的索引表,會佔用較多的存儲空間。另外,在增加和刪除數據時要修改索引表,因而會花費較多的時間。

4) 散列存儲: 根據元素的關鍵字直接計算出該元素的存儲地址,又稱爲Hash存儲。其優點是檢索、增加和刪除結點的操作都很快;缺點是如果散列函數不好可能出現元素存儲單元的衝突,而解決衝突會增加時間和空間開銷。

數據的運算

施加在數據上的運算包括運算的定義和實現。

  • 運算的定義是針對邏輯結構的,指出運算的功能;
  • 運算的實現是針對存儲結構的,指出運算的具體操作步驟。

我的理解:你想要計算你所認識所有人的平均年齡,又由於你每隔一段時間都會有新的朋友,**於是你寫個函數,專門計算平均年齡。**每次你想要知道平均年齡,就執行以下這個函數即可。那麼,這個函數,就是一個數據的運算。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章