資料結構
資料結構是一門研究非數值計算的程式設計問題中的計算機的操作物件以及它們之間的關係和操作等的學科。
基本概念
data:對客觀事物的符號表示
資料元素(data element):資料的基本單位,可由若干資料項組成
資料項(data item):資料不可分割的最小單位
資料物件(data object):性質相同的資料元素的集合,是data的乙個子集
資料結構(data structure):相互之間存在一種或多種特定關係的資料元素的集合。形式定義:資料結構是乙個二元組,d 是資料元素的有限集,s是d上關係(邏輯關係)的有限集
data structure=(d,s)
4種基本結構:
集合:其中的元素除了同屬乙個集合沒其他關係
線性結構:一對一
樹形結構:一對多
圖狀或網狀結構:多對多
資料結構在計算機中的表示(又稱為映像)稱為資料的物理結構,又叫儲存結構。它包括資料元素的表示和關係的表示。可以使用乙個由若干位組合起來形成乙個位串表示乙個資料元素,通常稱這個位串為元素或節點(element or node)。當資料元素由若干資料項組成時,位串中對應於各個資料項的子位串稱為資料域(data field)。因此,元素和結點可以看成是資料元素在計算機中的映像。
資料元素之間的關係在計算機中有兩種不同的表示方式:順序映像和非順序映像,由此得到兩種不同的儲存結構:順序儲存結構和鏈式儲存結構。順序映像的特點是借助元素在儲存器中的相對位置來表示資料元素之間的邏輯關係。非順序映像的特點是借助指示元素儲存位址的指標(pointer)表示資料元素之間的邏輯關係。
演算法的設計依賴於選定的資料(邏輯)結構,演算法的實現依賴於採用的儲存結構。
資料型別(data type):是乙個值的集合和定義在這個值集上的一組操作的總稱。
按照「值」的特性,資料型別分為:非結構的原子型別(值不可分解)和結構型別(其值是由若干成分按照某種結構組成的,可以分解的,並且他的成分可以是結構的或是非結構的)
抽象資料型別abstract data type 即adt是指乙個數學模型以及定義在該模型上的一組操作。定義僅取決於它的一組邏輯特性,與其在計算機內部如何實現無關。「抽象」意義在於資料型別的數學抽象特性。
原子型別:屬於原子型別的變數的值是不可分解的
固定聚合型別:由確定數目的成分按照某種結構組成
可變聚合型別:相比於固定聚合型別值的成分數目不確定
adt形式定義:(d,s,p);d是資料物件,s是d上關係集,p是對d的基本操作集。
adt抽象資料型別名adt抽象資料型別名
//其中資料物件和資料關係的定義用偽碼描述
基本操作名(參數列)
初始條件:《初始條件描述》
//描述了操作執行之前資料結構和引數應滿足的條件
操作結果:《操作結果描述》
//操作正常完成後,資料結構的變化狀況和應返回的結果
基本操作有兩種引數:賦值引數只為操作提供輸入值;引用引數以&打頭,除提供輸入值之外,還將返回操作結果。
13.多形資料型別(polymorphic data type):是指值的成分不確定的資料型別
抽象資料型別
本書預定義的常量和型別
//函式結果狀態**
#define true 1
#define false 0
#define ok 1
#define error 0
#define infeasible -1
#define overflow -2
//status是函式的型別,其值是函式結果狀態碼
typedef
int status;
資料結構表示(儲存結構)用型別定義(typedef)描述,資料元素型別約定為elemtype,由使用者在使用該資料型別時自行定義。
基本操作演算法由以下形式函式描述
函式型別 函式名 (函式引數表)
//函式名
//以&打頭的引數即為引用引數
基本函式
max
(表示式1
,表示式2,.
..,表示式n)
;//最大值
min(表示式1
,表示式2,.
..,表示式n)
;//最小值
abs(表示式)
;//絕對值
floor
(表示式)
;//不足整數值
ceil
(表示式)
;//進製整數值
eof(檔案變數)或eof;
//判定檔案結束
eoln
(檔案變數)或eoln//判定行結束
邏輯運算
&&與運算:對a&&b,當a為0,不再對b求值
||或運算:對a||b,當a非0,不再對b求值
演算法和演算法分析
演算法:對特定問題求解步驟的一種描述,是指令的有限序列,每個指令表示乙個或多個操作
有窮性確定性可行性
輸入輸出
演算法設計要求:正確性,可讀性readability,健壯性robustness,效率與低儲存量需求
演算法效率的度量:演算法執行時間需通過依據該演算法編制的程式在計算機上的執行時所消耗的時間來度量。
事後統計
事前分析估算:取決於演算法的策略、問題的規模、書寫的語言、編譯程式產生機器**的質量,機器執行指令的速度。
由於同一演算法在不同語言、不同編譯程式、不同計算機上效率均有差異,所以認為乙個特定演算法「執行工作量」的大小只依賴與問題的規模,即是問題規模的函式。
演算法中基本操作重複執行的次數是問題規模n的某個函式f(n),演算法的時間度量記作:
t(n) = o(f(n))
隨著問題規模n的增大,演算法執行時間的增長率和f(n)的增長率相同,稱作演算法的漸進時間複雜度(asympototic time cpmplexity),簡稱時間複雜度。語句的頻度(frequency count)是語句重複執行的次數。
演算法的儲存空間要求:空間複雜度作為演算法所需儲存空間的度量
s(n) = o(f(n))
n為問題規模,乙個程式處理需要儲存空間來寄存本身所用指令、常量、變數、輸入資料之外,也需一些對資料進行操作的工作單元和儲存一些為實現計算所需的輔助空間。 資料結構筆記
程式效率與組織方式有關 圖書館擺書 二分查詢 程式效率與操作有關 迴圈和遞迴 遞迴雖簡單不過耗費大量空間 程式效率與演算法有關 多項式求和 秦九韶要比普通演算法快乙個數量級 測試兩種演算法的 include include include define max 101 define maxl 1e7...
資料結構筆記
一 鄰接矩陣 鄰接矩陣儲存使用2個陣列儲存圖的資訊 1個以為陣列儲存頂點,乙個二維陣列儲存邊的資訊 1 二維陣列中的對角線為0,以為不存在頂點到自身的邊 2 要知道某個點的出度,就是頂點vi在第i行的元素之和,入度就是該頂點所在列的元素之和 3 頂點vi的所有鄰接點就是吧矩陣中第i行元素掃瞄一遍 4...
資料結構筆記
二叉樹的遍歷操作 二叉樹的遍歷是指從根結點出發,按照某種次序 訪問二叉樹中的所有結點,使得每個結點被訪問一 次且僅被訪問一次。抽象操作,可以是對結點進行的各種 處理,這裡簡化為輸出結點的資料。前序遍歷 中序遍歷 後序遍歷 層序遍歷 查詢的基本概念 靜態查詢適用於 查詢集合一經生成,便只對其進行 查詢...