目錄
早期的計算機主要用於數值計算,現在,計算機主要用於非數值計算,包括處理字元、** 和影象等具有一定結構的資料。如何合理地組織資料、高效地 處理資料,這就是 「資料結構」主要研究的問題。
1.1 資料結構的研究內容
資料結構是一門研究非數值計算程式設計中的操作物件, 以及這些物件之間的關係和操作的學科。元素之間存在簡單一對一的線性關係,這類數學模型稱為 "線性」 的資料結構。元素之間是一對多的層次關係, 這類數學模型稱為 「樹 」 的資料結構。元素之間是多對多的網狀關係,施加於物件上 的操作依然有查詢、插入和刪除等。這類數學模型稱為 「圖 」 的資料結構。
1.2 基本概念和術語
1.2.1 資料、 資料元素、 資料項和資料物件
資料是客觀事物的符號表示,是所有能輸入到計算機中並被電腦程式處理的符號 的總稱。
資料元素是資料的基本單位,在計算機中通常作為乙個整體進行考慮和處理。資料元素用於完整地描述乙個物件,如前一節示 例中的一名學生記錄,樹中棋盤的乙個格局(狀態),以及圖中的乙個頂點等。
資料項是組成資料元素的、有獨立含義的、不可分割的最小單位。資料物件是性質相同的資料元素的集合,是資料的乙個子集。
1.2.2 資料結構
資料結構是相互之間存在一種或多種特定關係的資料元素的集合 資料結構包括邏輯結構和儲存結構兩個層次。
邏輯結構資料的邏輯結構是從邏輯關係上描述資料,它與資料的儲存無關,可以看作是從具體問題抽象出來的數學模型
資料的邏輯結構有兩個要素: 一是資料元素;二是關係。關係是指資料元素間的邏輯關係。通常有四類基本結構,複雜程度依次遞進:(1) 集合結構 (2) 線性結構 (3) 樹結構 (4) 圖結構或網狀結構
集合結構、樹結構和圖結構都屬於非線性結構。線性結構包括線性表、棧和佇列、字串、陣列、 廣義表。非線性結構包括樹和二叉樹、有向圖和無向圖
儲存結構 資料物件在計算機中的儲存表示稱為資料的儲存結構。資料元素在計算機中有兩種基本的儲存結構,分別是順序儲存結構和鏈式儲存結構。
(1) 順序儲存結構 順序儲存結構通常借助程式語言的陣列型別來描述。
(2) 鏈式儲存結構 無需占用一整塊儲存空間,所以鏈式儲存結構通常借助於程式語言的指標型別來描述。
1.2.3 資料型別和抽象資料型別
資料型別 在程式語言中,每乙個資料都屬於某種資料型別。資料型別是乙個值的集合和定義在這個值集上的一組操作的總稱。
抽象資料型別 抽象資料型別一般指由使用者定義的、表示應用問題的數學模型,具體包括三部分:資料物件、資料物件上關係的集合以及對資料物件的基本操作的集合。
1.3演算法和演算法分析
1.3.1 演算法的定義及特性
演算法是為了解決某類問題而規定的乙個有限長的操作序列。
(1)有窮性。乙個演算法必須總是在執行有窮步後結束,且每一步都必須在有窮時間內完成。
(2) 確定性。對千每種情況下所應執行的操作,在演算法中都有確切的規定。
(3) 可行性。演算法中的所有操作都可以通過已經實現的基本操作運算執行有限次來實現。
(4) 輸入。乙個演算法有零個或多個輸入。
(5) 輸出。乙個演算法有乙個或多個輸出。
1.3.2 評價演算法優劣的基本標準
(1)正確性。在合理的資料輸入下,能夠在有限的執行時間內得到正確的結果。
(2) 可讀性。乙個好的演算法,首先應便千人們理解和相互交流,其次才是機器可執行性。
(3) 健壯性。當輸入的資料非法時,好的演算法能適當地做出正確反應或進行相應處理。
(4) 高效性。時間高效是指演算法設計合理,執行效率高,可以用時間複雜度來度量;空間高效是指演算法占用儲存容量合理,可以用空間複雜度來度量。
1.3.3 演算法的時間複雜度
問題規模和語句頻度
不考慮計算機的軟硬體等環境因素,影響演算法時間代價的最主要因素是問題規模。問題規模 是演算法求解問題輸入量的多少,是問題大小的本質表示,一般用整數n表示。問題規模n對不同的問題含義不同,n越大演算法的執行時間越長。
乙個演算法的執行時間大致上等千其所有語句執行時間的總和, 而語句的執行時間則為該條語句的重複執行次數和執行一次所需時間的乘積。
一條語句的重複執行次數稱作語句頻度。
演算法分析並非精確統計演算法實際執行所需時間,而是針對演算法中語句的執行 次數做出估計,從中得到演算法執行時間的資訊。
2.演算法的時間複雜度定義
為了客觀地反映乙個演算法的執行時間, 可以只用演算法中的 「基本語句" 的執行次數來度量演算法的工作量。 「基本語句」 指的是演算法中重複執行次數 和演算法的執行時間成正比的語句, 它對演算法執行時間的貢獻最大。
演算法的執行時間是隨問題規模增長而增長的, 因此對演算法的評價通常只需考慮其隨問題規模增長的趨勢。用"o"來表示數量級。 一般情況下,演算法中基本語句重複執行的次數是問題規模n的某個函式f(n), 演算法的時間量 度 記作 t(n) = 0(f(n)) 它表示隨問題規模n的增大,演算法執行時間的增長率和f(n)的增長率相同, 稱做演算法的漸近時間複雜度, 簡稱時間複雜度。
x=90;y=100;
while(y >0)
if(x>100)
else x++;
時間複雜度:1100
for(i=0;i時間複雜度:o(n^2)
s=0;
for(i=0;i時間複雜度:o(n^2)
i=1;
while(i<=n)
i=i*3;
時間複雜度:log3n 資料結構第一章
1.程式設計的實質 資料表示和資料處理。資料表示的核心是資料結構,資料處理的核心是演算法。資料結構 演算法 程式 2.資料是資訊的載體,在電腦科學中是指所以所有能 輸入到計算機中並能被識別電腦程式和處理的符號集合。資料的分類 一是整體,實數等數值資料 二是文字,聲音,圖形和影象等非數值資料。資料元素...
資料結構第一章
資料結構第一章 1.1廣播方式傳送檔案 傳送機傳送一次,所有都可接收。優 程式設計容易 傳送速度快 卻 容易丟包 1.2單播方式傳送 一次乙個 1.3改進方式 多級單播傳輸 類傳銷方式 順序儲存 陣列 鏈式 鍊錶 雜湊儲存 資料元素的儲存位置由值確定。資料元素之間的關係通過指標表達。查詢 如果i 某...
資料結構第一章
1.1 計算 計算才是最終的目標 繩索計算器 尺規計算器 通用步驟,給外面的一點做平行線 1.a4 演算法 a5 有窮性 u運算後加到序列中 因為64之後,一直除2都可以.演算法必須是有窮的,但是27這個,是無窮的,序列 是有窮的 但是也是很多 而42只有8個序列 好演算法有人說好演算法是 最重要的...