資料結構 緒論

2021-06-22 07:47:56 字數 3281 閱讀 5113

一.資料結構起源

2023年,美國的donald e.knuth教授在其所寫的《計算機程式設計藝術》中,系統的闡述了資料的邏輯結構和儲存結構及其操作,開創了資料結構的課程體系。資料結構是一門研究非數值計算的程式設計問題中的操作物件,以及他們之間的關係和操作等相關問題的學科。

二.基本概念和術語

資料 data:描述客觀事物的符號。是計算機可以操作的物件,具備兩個前提:可以輸入到計算機,能被電腦程式處理。

資料元素 data element:組成資料的,有一定意義的基本單位,在計算機中通常作為整體處理。

資料項 data item:資料元素不可分割的最小單位。比如書目資訊是乙個資料元素,而書名,作者名是資料項。

資料物件 data object:性質相同的資料元素的集合,是資料的子集。比如整數資料物件,字元資料物件。

資料結構 data structure:相互之間存在一種或多種特定關係的資料元素的集合。

三.邏輯結構與物理結構

資料結構其實就是指資料元素之間的相互邏輯關係。分為四種:集合結構,線性結構,樹形結構,圖形結構。

物理結構是指資料的邏輯結構在計算機中的儲存形式。分為兩種:順序儲存[資料元素存放在位址連續的儲存單元裡,資料間的邏輯關係和物理關係是一致的],鏈式儲存[資料元素存放在任意的儲存單元裡,可以連續也可以不連續]。

四.抽象資料型別

資料型別 data type:是指乙個值的集合和定義在這值集合上的一組操作的總稱。資料型別按照值的不同進行劃分,用來說明變數或表示式的取值範圍和所能進行的操作。

原子型別:不可再分解的基本型別。比如整型,實型,字元型。

結構型別:由若干個型別組合而成,是可以再分解的。比如整型陣列。

抽象資料型別 abstract data type:指乙個數學模型以及定義在該模型上的一組操作。其定義僅取決於他的一組邏輯特性,與其在計算機內部如果表示和實現無關。抽象資料型別還可以使用者自己定義,可用固有的資料型別來表示和實現,可利用已經實現的操作來進行新的操作。

五.演算法定義和特性

演算法:解決特定問題求解步驟的描述,在計算機中表現為指令的有限序列,並且每條指令表示乙個或多個操作。

輸入輸出:演算法具有零個或多個輸入,至少需要乙個或多個輸出。

有窮性:執行有限的步驟之後,自動結束而不會出現無限迴圈,並且每乙個步驟在可接受的時間內完成。

確定性:演算法的每一步驟都具有確定的含義,不會出現二義性。

可行性:每一步都必須是可行的,每一步都能通過執行有限次基本操作完成

六.演算法設計的要求

正確性:1.沒有語法錯誤。2.對於合法輸入資料產生滿足要求的輸出結果。3.對於非法的輸入資料可以得出滿足規格說明的結構。4.對於精心選擇的甚至刁難的測試資料都有滿足要求的輸出要求。

可讀性:寫**是為了讓計算機執行,也為了便於他人閱讀,理解和交流。

健壯性:當輸入資料不合法時,演算法也能做出相關處理,而不是產生異常或莫名其妙的結果。

時間效率高儲存量低:演算法執行時間短,程式執行所占用的記憶體或外部硬碟儲存空間小。

七.演算法效率的度量

事後統計方法:需要通過設計好的測試程式和資料,利用計算機計時器對不同演算法編制的程式的執行時間進行比較。但這種方法需要事先編好程式,費時費力。時間的比較又依賴於計算機硬體和軟體等環境因素。演算法的測試資料設計也很困難,因為程式的執行時間往往還與測試資料的規模有關。

事前分析估算方法:消耗時間取決於1.演算法採用的策略方法。2.編譯產生的**質量。3.問題的輸入規模。4.機器執行指令的速度。

八.演算法時間複雜度

函式的漸近增長:給定兩個函式f(n)和g(n),如果存在乙個整數n,使得對於所有的n>n,f(n)總是大於g(n),那麼我們說f(n)的漸進增長快於g(n),演算法f的時間複雜度高於g。函式中的常數和其他次要項可以忽略,更應該關注最高端項的階數。

演算法的時間複雜度:也就是演算法的時間度量,用語句總的執行次數來描述,記做:t(n)=o(f(n))。它表示隨問題規模n的增大,演算法執行時間的增長率和f(n)的增長率相同,稱為演算法的漸近時間複雜度。

推導大o階方法:1.用常數1取代執行時間中的所有加法常數。2.在修改後的執行次數函式中,只保留最高端項。3.如果最高端項存在且不為1,則去除與這個項相乘的常數。

常數階:與問題規模大小無關,即與n無關,執行時間恆定的演算法,稱之為具有o(1)的時間複雜度。

線性階:迴圈n次,迴圈體內是o(1)的步驟序列。

對數階:迴圈的時間複雜度等於迴圈體的複雜度乘以該迴圈執行的次數。

這裡若迴圈次數設為x,則 2^x = n.因此迴圈次數為 x = log(n)。

cout = 1;  

while(count < n)

平方階:

總的執行次數為n+(n-1)+(n-2)+...+1 = (n^2+n)/2。因此時間複雜度為o(n^2)。

int i,j;  

for(i=0;i

}

常見的時間複雜度:o(1)

最壞情況與平均情況:沒有特殊說明情況下,都是指最壞時間複雜度。

九.演算法空間複雜度:

乙個程式在計算機上執行時,除了需要儲存程式本身的指令,常數,變數和輸入資料外,還需要儲存對資料操作的儲存單元。若輸入資料所佔空間只取決於問題本身和演算法無關,這樣只需要分析該演算法在實現時所需的輔助單元即可。若演算法執行時所需要的輔助單元相對於輸入資料量n是個常數,則稱此演算法為原地工作,空間複雜度為o(1)。

資料結構 資料結構緒論

資料結構是相互間存在一種或多種特定關係的資料元素的集合。程式設計 資料結構 演算法 資料結構是一門研究非數值計算的程式設計問題中的操作物件,以及他們之間的關係和操作等相關問題的學科。資料元素是組成資料的 有一定意義的基本單位,是計算機中通常作為整體處理,也被稱為記錄。乙個資料元素可以由若干個資料項組...

資料結構 緒論

程式 資料結構 演算法 資料 對客觀事物的符號表示。資料元素 資料的基本單位,由若干個資料項組成。資料項是資料不可分割的最小單位。資料物件 性質相同的資料元素的集合,使資料的乙個子集。資料元素是相互之間存在一種或多種特定關係的資料元素的集合。預定義常量型別 函式結果狀態嗎 define true 1...

資料結構緒論

資料結構是一種抽象資料的過程,這種能力是任何工具都無法代替的。學習資料結構的目的 資料結構是計算機專業的基礎,它為幾乎所有的軟體設計的基礎。同時他也培養求解複雜問題的能力。那麼,什麼是資料結構呢,這個概念是很重要的,人月神話上有一段話,說人們往往喜歡將問題分解開來處理,但是這樣一來造成了對整個問題的...