基本概念和術語
- 數據
- 數據元素
數據元素是數據的基本單位。
數據項是構成數據元素的不可分割的最小單位。 - 數據對象
數據對象是具有相同性質的數據元素的集合,是數據的一個子集。 - 數據類型
數據類型是一個值的集合和定義在此集合上的一組操作的總稱。 - 抽象數據類型(ADT)
抽象數據類型描述了數據的邏輯結構和抽象運算,通常用(數據對象,數據關係,基本操作集)這樣的三元組來表示,從而構成一個完整的數據結構定義。 - 數據結構
數據結構是相互之間存在一種或多種特定關係的數據元素的集合。數據結構包括三方面的內容:邏輯結構、存儲結構和數據的運算。
數據結構的三要素
-
數據的邏輯結構
數據的邏輯結構是指數據元素之間的邏輯關係,即從邏輯關係上描述數據。它與數據的存儲無關,是獨立於計算機的。數據的邏輯結構分爲線性結構和非線性結構。
線性結構:結構中的數據元素之間只存在一對一的關係。
-
數據的存儲結構
存儲結構是指數據結構在計算機中的表示,也稱物理結構。數據的存儲結構是邏輯結構在計算機上的映射,它不能獨立於邏輯結構而存在。
數據的存儲結構主要有順序存儲、鏈式存儲、索引存儲和散列存儲。- 順序存儲:邏輯上相鄰的元素物理位置上也相鄰。
優點是可以實現隨機存取,,每個元素佔用最少的存儲空間;缺點是隻能使用相鄰的一整塊存儲單元,可能產生較多的外部碎片。 - 鏈式存儲:不要求邏輯上相鄰的元素在物理位置上也相鄰,藉助指針來表示元素之間的邏輯關係。
優點是不會出現碎片現象,能充分利用所有存儲單元;缺點是每個元素因存儲指針而佔用額外的存儲空間,且只能實現順序存取。 - 索引存儲:在存儲元素信息的同時,建立附加的索引表。
優點是檢索速度快;缺點是增加附加的索引表後會佔用較多的存儲空間。在增加和刪除數據時要修改索引表,會花費較多的時間。
- 散列存儲:根據元素的關鍵字直接計算出該元素的存儲地址,又稱Hash存儲。
優點是檢索、增加和刪除結點的操作都很快;缺點是若散列函數不好,則可能出現元素存儲單元的衝突,解決衝突會增加時間和空間開銷。
- 順序存儲:邏輯上相鄰的元素物理位置上也相鄰。
-
數據的運算
運算的定義是針對邏輯結構的,指出運算的功能;運算的實現是針對存儲結構的,指出運算的具體操作步驟。
鏈式存儲設計時,各個不同結點的存儲空間可以不連續,但結點內的存儲單元地址必須連續。
- 對於兩種不同的數據結構,它們的邏輯結構和物理結構有可能完全相同。例如二叉樹和二叉排序樹,二叉排序樹可以採用二叉樹的邏輯表示和存儲方式,但它們的運算定義不同,以查找結點爲例:二叉樹的時間複雜度爲,二叉排序樹的時間複雜度爲.
- 線性表既可以用順序存儲的方式實現,也可以用鏈式存儲的方式實現。在順序存儲的方式下,在線性表中插入和刪除元素,平均要移動近一半的元素,時間複雜度爲;而在鏈式存儲方式下,插入和刪除的時間複雜度都是。
算法的基本概念
算法是對特定問題求解步驟的一種描述,是指令的有限序列,其中每個指令表示一個或多個操作。具有以下五個特性:
- 有窮性
- 確定性
- 可行性
- 輸入
- 輸出
通常設計一個“好”的的算法應達到以下目標:
- 正確性
- 可讀性
- 健壯性
- 效率與低存儲量需求
算法效率的度量是通過時間複雜度和空間複雜度來描述的。
某算法的時間複雜度爲,表明該算法的執行時間與成正比,問題規模仍是n