1、資料結構初識
(1)程式、資料結構與演算法的關係
程式=資料結構+演算法
(2)資料
概念:
- 是能夠輸入到計算機的能夠被計算機處理的各種符號的集合
- 資訊的載體
- 對客觀事物的抽象化表示
- 能夠被計算機識別、儲存和加工
例如:將使用者的資訊抽象為一張二維表,儲存到資料庫中
分類:
- 數值型資料:整數、實數等,能夠進行數值運算
- 非數值型資料:文字、影像、圖片、聲音等
(3)資料元素和資料項
資料元素:是資料的基本單位,在計算機中通常作為一個整體考慮和處理(例如:學生退學後刪除某一學生的資訊),也稱為元素、記錄、結點、頂點
資料項:構成資料元素的不可分割的最小單位,例如:學生的學號
資料、資料元素、資料項的關係:
整張資料表是使用者的資料,使用者的使用者名稱是資料項、每一個使用者的資訊是一個資料元素
(4)資料物件
概念:
是性質相同的資料元素的集合,是資料的一個子集
(5)資料結構
概念:
資料元素之間的關係
資料結構的內容:
- 邏輯結構:資料元素之間的邏輯關係
- 物理結構:資料元素及其關係在記憶體中的表示
- 資料的運算和實現:對資料元素可以施加的操作以及這些操作在相應的儲存結構上的實現
邏輯結構的分類:
- 線性結構:有且僅有一個開始結點和終端結點,並且所有的結點都最多隻有一個直接前驅和直接後繼,例如:線性表、棧、佇列、串
- 非線性結構:一個結點有多個直接前驅和直接後繼,例如:樹、圖
儲存結構
- 順序結構:用一組連續的儲存單元依次儲存資料元素
- 鏈式結構:一組任意的儲存單元來儲存資料,資料之間的邏輯關係用指標來表示,如:連結串列
(6)資料型別和抽象資料型別
資料型別規定了數值的取值範圍以及操作,是一組性質相同的值的集合以及定義在這個集合上的一組操作的總稱
抽象資料型別(ADT abstrace data type):一個數學模型以及在數學模型(邏輯結構)上的一組操作,不考慮在計算機內的具體儲存與運算的具體實現演算法
三要素:
- 資料物件:例如:定義複數的時候有實部和虛部
- 資料關係:例如:x是實部,y是虛部
- 資料操作:定義、銷燬、獲得實部、虛部等
2、演算法與演算法分析
(1)演算法的描述
- 自然語言:用自然語言描述演算法的過程
- 流程圖:傳統流程圖、NS流程圖
(2)演算法和演算法分析
- 演算法是解決問題的一種方法或一個過程,考慮如何將輸入轉換為輸出,一個問題可以有多個演算法
- 程式是用某一種語言對演算法的具體實現
(3)資料結構和演算法的關係
- 資料結構是演算法的基礎
- 演算法的操作物件是資料結構,在設計演算法的時候要構建合適這種演算法的資料結構
- 資料結構設計主要是選擇資料的儲存方式(陣列或連結串列),演算法設計是在選定的資料結構上設計一個滿足要求的好的演算法
- 資料結構關注的是資料的邏輯結構、儲存結構、基本操作,而演算法關注的是如何在資料結構的基礎上解決實際問題
(4)什麼是演算法
演算法是求解問題的一系列步驟,用來將輸入的資料轉換為輸出結果
(5)演算法的重要特性
- 有限性:執行有限步之後結束
- 確定性:每一條指令無二義性
- 可行性:每一條運算都能精確地執行
- 輸入性:一個演算法有零個或多個輸入
- 輸出性:一個演算法有一個或多個輸入
(6)演算法設計的目標
- 正確性:正確地執行預先規定的功能和效能要求
- 可使用性(使用者友好性):可以很方便地使用
- 可讀性:易於理解
- 健壯性(魯棒性):提供異常處理,能夠對不合理的資料進行檢查
- 高效率與低儲存:執行時間短的演算法效率高,所需的最大儲存容量低的演算法好
(7)演算法時間效率的度量
- 事後統計:不可取
- 事前分析:一個演算法的執行時間是指一個演算法在計算機上執行所耗費的時間,大致等於計算機執行一種簡單的操作(賦值、比較等)所需的時間與執行這種簡單操作的次數的乘積。因為每一條語句的執行時間大致相同,因此,可以只計算語句的頻度(語句的次數)https://www.cnblogs.com/zhai1997/p/12034257.html時間複雜度是由巢狀最深的語句頻度決定的
(8)空間複雜度
如:陣列倒序