第一章 緒論
第二章 線性表
第三章 棧和佇列
第四章 串
第五章 陣列和廣義表
第六章 樹和二叉樹
第七章 圖
第八章 排序
第九章 查詢
1.2 為什麼學習資料結構
1.3 資料結構的基本概念
1.4 演算法
1.4.3 演算法與程式的區別
1.5 演算法描述
1.6 演算法分析
1.7 例題
1.1.1 資料結構的定義
資料結構是一門研究非數值計算的程式設計問題中計算機的操作物件以及它們之間的關係和操作的學科。
資料結構是帶有結構的資料元素的集合,資料元素之間的相互關係,即資料的組織形式。資料的組織方法與效率密切相關,採用不同資料的組織方法其處理效率也不同,對問題找出合適的資料組織方法十分重要。
1.1.2 資料結構包括的內容
(1)邏輯結構:資料元素之間的邏輯關係。
(2)儲存結構:資料元素及其關係在計算機儲存器內的表示。
(3)操作:資料的運算(檢索、排序、插入、刪除、修改)。
1.2.1 學習資料結構的作用
(1)計算機內的數值運算依靠方程式,而非數值運算(如表、樹、圖等)則要依靠資料結構。
(2)同樣的資料物件,用不同的資料結構來表示,運算效率可能有明顯的差異。
(3)程式設計的實質是對實際問題選擇乙個好的資料結構,加之設計乙個好的演算法。而好的演算法在很大程度上取決於描述實際問題的資料結構。
1.2.2 **號碼查詢問題
(1)要寫出好的查詢演算法,取決於這張表的結構及儲存方式。
(2)**號碼表的結構和儲存方式決定了查詢(演算法)的效率。
求解方法:
(1)順序表法:陣列儲存,一次查詢結構簡單,但效率偏低。
(2)索引結構法:按姓氏索引定位,支援快速查詢。
資料結構分為邏輯結構和儲存結構:
一種邏輯結構可以採用不同儲存方式存放在計算機中,但都必須反映出要求的邏輯關係。
1.3.1 基本邏輯結構
(1)集合結構:結構中的資料元素之間除了同屬於乙個集合的關係外無任何其他關係。
(2)線性結構:結構中的資料元素之間存在著一對一的線性關係。
(3)層次結構:結構中的資料元素存在著一對多的層次關係。
(4)網狀結構:結構中的資料元素存在著多對多的任意關係。
1.3.2 基本儲存結構
儲存結構(又稱物理結構),資料元素之間關係在計算機中的表示方法:
(1)順序結構:一組連續單元(順序儲存結構,如陣列)
(2)非順序結構:一組任意儲存單元(非順序儲存結構,如鍊表)
1.4.1 演算法的概念和特點
演算法是由若干條指令組成的有窮序列,是為解決特定問題而規定的有限集合。
演算法具有以下的特點:
1.4.2 演算法的定義
1.4.2.1 正確性
演算法的正確性具有以下三個層次:
1.4.2.2 可讀性
乙個好的演算法首先應該便於人們理解和相互交流,其次才是機器可執行。可讀性好的演算法有助於人們對演算法的理解,難懂的演算法易於隱藏錯誤且難於除錯和修改。
1.4.2.3 健壯性
即對非法輸入的抵抗能力。它強調即使輸入非法資料,演算法應能加以識別並作出處理,而不是產生誤動作或陷入癱瘓。
1.4.2.4 高效率和低儲存量
演算法的效率通常是指演算法的執行時間。對於乙個具體的問題的解決通常可以有多給演算法,對於執行時間短的演算法其效率就高。
所謂的儲存量要求,是指演算法在執行過程中所需要的最大儲存空間,這兩者都與問題的規模有關。
1.4.3 演算法與程式的區別
(1)乙個程式不一定滿足有窮性,但演算法一定。
(2)程式中的指令必須是機器可執行的,而演算法無此限制。
(3)乙個演算法若用機器可執行的語言來描述,則它就是乙個程式。
演算法描述採用類語言
,類語言接近於高階語言而又不失嚴格的高階語言。它具有高階語言一般的語句格式,撇掉語言中的細節,把注意力主要集中在演算法處理步驟本身的描述上。
演算法描述的要點如下:
演算法評價的標準主要是其執行占用機器資源在執行時間和儲存空間上的表現。
1.6.1 時間複雜度
演算法的執行時間 = 其所有語句執行時間的總和。
語句的執行時間 = 該條語句的執行次數 * 執行一次所需時間。
語句頻度:指該語句在乙個演算法中重複執行的次數。
時間複雜度是以語句頻度刻畫隨問題規模n增加的函式f(n)
執行時間度量,記作t(n)=o(f(n))
。
常見函式的時間複雜度按數量遞增排列及增長率:
常數階o(1)例如分析以下對數階o(log2n)
線性階o(n)
線性對數階o(n log2n)
平方階o(n2)
立方階o(n3)
…… k次方階o(nk)
指數階o(2n)
x=x+1
語句的時間複雜度:
(1)時間複雜度為o(1),稱為常數階
x=x+1;
(2)時間複雜度為o(n),稱為線性階
for(i=1; i<=n; i++)
(2)時間複雜度為o(n2),稱為平方階
for(i=1; i<=n; i++)
}
1.6.2 空間複雜度
空間複雜度是指演算法在計算機內執行時所需儲存空間的度量,以儲存單元個數刻畫隨問題規模增加的函式f(n)
儲存空間量度,記作:s(n) = o(f(n))
。
1.6.3 演算法分析的目的
目的在於選擇合適演算法和改進演算法
1.7.1 例1
for ( i=1; i < n; i++ )
解:
語句1頻度為(n-1);語句2頻度為(n-1)x(2n+1)=2n2-n-1,因此時間複雜度t(n)=2n2-2=o(n2)。1.7.2 例2
i=1; //語句1
while (i<=n)
解:
語句1頻度為1;設語句2頻度為f(n),則有2f(n)<=n,即f(n)<=log2n,去極大值,f(n)=log2n,因此時間複雜度t(n)=1+log2n=o(log2n)。
資料結構導論 第一章概論)
1 資料結構 data structure 是計算機組織資料和儲存資料的方式 是指一組相互之間存在一種或多種特定關係的資料的組織方式和它們在計算機內的儲存方式,以及定義在該組資料上的一組操作。2 計算機解決問題的步驟 建立數學模型 設計演算法 程式設計實現演算法 3 資料的邏輯結構是指資料及資料的組...
第一章 概論
1.1軟體 程式 軟體工程 程式 資料結構 演算法 軟體架構 software architecture 軟體設計與實現 software design,implementation and debug 源 guanli source code control 配置管理 software confi...
資料結構第一章
1.程式設計的實質 資料表示和資料處理。資料表示的核心是資料結構,資料處理的核心是演算法。資料結構 演算法 程式 2.資料是資訊的載體,在電腦科學中是指所以所有能 輸入到計算機中並能被識別電腦程式和處理的符號集合。資料的分類 一是整體,實數等數值資料 二是文字,聲音,圖形和影象等非數值資料。資料元素...