數據結構基本概念
數據結構: 程序 = 數據結構 + 算法
1.數據:即信息的載體,是能夠輸入到計算機中並且能被計算機識別、存儲和處理的符號總稱。
2.數據元素:是數據的基本單位,又稱之為記錄(Record)。一般,數據元素由若干基本項(或稱字段、域、屬性)組成。
3.數據結構:指的是數據元素及數據元素之間的相互關系,或組織數據的形式。
數據之間的結構關系
一、邏輯結構:表示數據之間的抽象關系(如鄰接關系、從屬關系等),按每個元素可能具有的直接前趨數和直接后繼數將邏輯結構分為“線性結構”和“非線性結構”兩大類。
1.特點:
只是描述數據結構中數據元素之間的聯系規律。
是從具體問題中抽象出來的數學模型,是獨立於計算機存儲器的(與機器無關)。
2.邏輯結構分類:集合,線性結構,非線性結構
1)線性結構是n個數據元素的有序(次序)集合。
集合中必存在唯一的一個"第一個元素";
集合中必存在唯一的一個"最后的元素";
除最后元素之外,其它數據元素均有唯一的"后繼";
除第一元素之外,其它數據元素均有唯一的"前驅"。
2)樹形結構(層次結構)
樹形結構指的是數據元素之間存在着“一對多”的樹形關系的數據結構,是一類重要的非線性數據結構。在樹形結構中,樹根結點沒有前驅結點,其余每個結點有且只有一個前驅結點。葉子結點沒有后續結點,其余每個結點的后續節點數可以是一個也可以是多個。
3)圖狀結構(網狀結構)
圖是一種比較復雜的數據結構。在圖結構中任意兩個元素之間都可能有關系,也就是說這是一種多對多的關系。
4)其他結構
除了以上幾種常見的邏輯結構外,數據結構中還包含其他的結構,比如集合等。有時根據實際情況抽象的模型不止是簡單的某一種,也可能擁有更多的特征。
二、存儲結構:邏輯結構在計算機中的具體實現方法,分為順序存儲方法、鏈接存儲方法、索引存儲方法、散列存儲方法。
1.特點:
是數據的邏輯結構在計算機存儲器中的映象(或表示)
存儲結構是通過計算機程序來實現的,因而是依賴於具體的計算機語言的。
2.存儲結構分類:順序存儲結構、鏈式存儲結構、索引存儲結構、散列存儲結構
1)順序存儲(Sequential Storage):將數據結構中各元素按照其邏輯順序存放於存儲器一片連續的存儲空間中。
2)鏈式存儲(Linked Storage):將數據結構中各元素分布到存儲器的不同點,用記錄下一個結點位置的方式建立它們之間的聯系,由此得到的存儲結構為鏈式存儲結構。
3)索引存儲(Indexed Storage):在存儲數據的同時,建立一個附加的索引表,即索引存儲結構=數據文件+索引表。
4)散列存儲:根據節點的關鍵字直接計算出該節點的存儲地址的一種存儲方式。
算法基本概念
1.定義:算法(Algorithm)是一個有窮規則(或語句、指令)的有序集合。它確定了解決某一問題的一個運算序列。對於問題的初始輸入,通過算法有限步的運行,產生一個或多個輸出。
數據的邏輯結構與存儲結構密切相關:
- 算法設計: 取決於選定的邏輯結構
- 算法實現: 依賴於采用的存儲結構
2.算法的特性
- 有窮性 —— 算法執行的步驟(或規則)是有限的;
- 確定性 —— 每個計算步驟無二義性;
- 可行性 —— 每個計算步驟能夠在有限的時間內完成;
- 輸入 ,輸出 —— 存在數據的輸入和出輸出
3.評價算法好壞的方法
- 正確性:運行正確是一個算法的前提。
- 可讀性:容易理解、容易編程和調試、容易維護。
- 健壯性:考慮情況全面,不容以出現運行錯誤。
- 時間效率高:算法消耗的時間少。
- 儲存量低:占用較少的存儲空間。
時間復雜度計算
算法效率——用依據該算法編制的程序在計算機上執行所消耗的時間來度量。“O”表示一個數量級的概念。根據算法中語句執行的最大次數(頻度)來 估算一個算法執行時間的數量級。
計算方法:
寫出程序中所有運算語句執行的次數,進行加和
如果得到的結果是常量則時間復雜度為1
如果得到的結果中存在變量n則取n的最高次冪作為時間復雜度
下圖表示隨問題規模n的增大,算法執行時間的增長率。