1. 程式人生 > >資料結構基礎知識點

資料結構基礎知識點

宣告:本內容主要是複習《資料結構(C語言)--嚴蔚敏等老師編寫》的筆記

資料:對客觀事物的符號描述,在電腦科學中是指所有能輸入到計算機中並被計算機程式處理的符號的總稱。

資料元素:資料的基本單位,在計算機中通常作為一個整體進行考慮和處理。

資料項:一個數據元素有若干個資料項組成,且資料項是資料的不可分割的最小單位。

資料物件:性質相同的資料元素的集合,是資料的一個子集。 

四者之間的關係如下圖:

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

結構:資料元素相互之間都不是孤立存在的,它們之間存在著某種關係,這種資料元素之間的關係稱為結構。                             

集合:結構中的資料元素之間除了“同屬於一個集合”的關係外,沒有其他的關係了。(資料元素之間很鬆散)

線性結構:結構中的資料元素之間存在一個對一個的關係。(一對一)

樹形結構:結構中的資料元素之間存在一個對多個的關係。(一對多)

圖狀結構或網狀結構:結構中的資料元素存在多個對多個的關係。(多對多)                                                                                

                                         

資料結構的形式定義為:資料結構是一個二元組Data_Structure=(D,S )     D:資料元素的有限集,S是D上關係的有限集。

邏輯結構:結構中定義的“關係”描述的是資料元素之間的邏輯關係,因此又稱為邏輯結構。

儲存結構(物理結構):資料結構在計算機中的表示(又稱映像)稱為資料的物理結構,又叫儲存結構。           

元素:在計算機中,可以用一個由若干位組合起來形成的一個位串表示一個數據元素,通常稱這個位串為元素或結點。   

資料域:當資料元素由若干資料項組成時,位串中對應於各個資料項的子位串稱為資料域。

資料元素之間的關係在計算機中有兩種不同的表示方法:順序映像非順序映像,因此得到兩種不同的儲存結構:順序儲存結構鏈式儲存結構

順序映像的特點:藉助元素在儲存器中的相對位置來表示資料元素之間的邏輯關係。

非順序映像的特點:藉助指示元素儲存地址的指標表示資料元素之間的邏輯關係。

資料型別:是一個值的集合和定義在這個值集上的一組操作的總稱。

抽象資料型別:指一個數學模型以及定義在該模型上的一組操作。僅僅取決於它的一組邏輯性,跟計算機內部如何實現無關。只要它的數學性質不變,其他的都不影響其外部的使用。

按照“值”的不同特性,高階程式語言中的資料型別可分為:非結構的原子型別,和結構型別

原子型別:變數的值是不可分解的。

固定聚合型別:該型別的變數,其值有確定數目的成分按某種結構組成。

可變聚合型別:“值”的成本數目不確定。

抽象資料型別可用以下三元組表示:(D,S,P)  D:資料元素的有限集,S是D上的關係集,P是對D的基本操作集。

ADT 資料抽象型別名{
    資料物件:<資料物件的定義>
    資料關係:<資料關係的定義>
    基本操作:<基本操作的定義>

}ADT 抽象資料型別名

資料物件和資料關係的定義用偽碼錶示,基本操作的定義格式為:

基本操作名(引數表)
    初始條件:<初始條件描述>
    操作結果:<操作結果描述>

基本操作有兩種引數:賦值引數只為操作提供輸入值;引用引數以&打頭,除了可以提供輸入值外,還將返回操作結果。

初始條件:描述了操作執行之前資料結構和引數應滿足的條件,若不滿足,則操作失敗,並返回相應出錯資訊。

操作結果:說明了操作正常完成之後,資料結構的變化狀況和應返回的結構。若初始條件為空,則省略之。

例:抽象資料型別三元組的定義:

ADT Triplet{
	資料物件:D={e1,e2,e3|e1,e2,e3∈ElemSet(定義了關係運算的某個集合)}
	資料關係:R1={<e1,e2>,<e2,e3>}
	基本操作:
	InitTriplet(&T,v1,v2,v3)
	操作結果:構造了三元組T,元素e1,e2和e3分別被賦以引數v1,v2和v3的值。
	DestoryTriplet(&T)
	操作結果:三元組T被銷燬。
	Get(T,i,&e)
	初始條件:三元組T已經存在,1≤i≤3。
	操作結果:用e返回T的第i元值。
	put(&,i,e)
	初始條件:三元組T已經存在,1≤i≤3。
	操作結果:改變T的第i元值為e。
	IsAscending(T)
	初始條件:三元組T已經存在。
	操作結果:如果T的3個元素按升序排列,則返回1,否則返回0。
	IsDescending(T)
	初始條件:三元組T已經存在。
	操作結果:如果T的3個元素按降序排列,則返回1,否則返回0。
	Max(T,&e)
	初始條件:三元組T已經存在。
	操作結果:用e返回T的3個元素中的最大值。
	Min(T,&e)
	初始條件:三元組T已經存在。
	操作結果:用e返回T的3個元素中的最小值。
}ADT Triplet

這本書使用的是C語言,因此後面有些例子使用的是C語言的程式設計方式。故我把書中對C語言程式設計風格截了下來,瞭解一下。

演算法:對特定問題求解步驟的一種描述,它是指令的有限序列,其中每一條指令表示一個或多個操作。下面是其5個重要特性:

  • 有窮性:一個演算法必須總是(對任何合法的輸入值)在執行有窮步之後結束,且每一步都可在有窮時間內完成。
  • 確定性:演算法中的每一條指令必須有確切的含義,讀者理解不會產生二義性。並且,在任何條件下,演算法只有唯一的一條執行路徑,即對於相同的輸入只能得出相同的輸出。
  • 可行性:一個演算法是可行的,即演算法中的描述操作都是可以通過已經實現的基本運算執行有限次來實現的。
  • 輸入:一個演算法有零個或多個的輸入,這些輸入取自於某個特定的物件的集合。
  • 輸出:一個演算法有一個或多個的輸出,這些輸出是同輸入有著某些特定關係的量。

演算法的設計要求:正確性、可讀性、健壯性、效率與低儲存量需求。

演算法效率的度量:事後統計的方法、事前分析估算的方法、機器執行指令的速度。

演算法時間的因素:一個演算法是由控制結構(順序、分支和迴圈3種)和原操作(指固有資料型別的操作)構成的,則演算法時間取決於兩者的綜合效果。

時間量度:從演算法中選取一種對與所研究的問題(或演算法型別)來說是基本操作的原操作,以該基本操作重複執行的次數作為演算法的時間量度。

時間複雜度:一般情況下,演算法中基本操作重複執行的次數是問題規模n的某個函式f(n),演算法的時間量度記作 T(n)=O(F(n)),他表示隨問題規模n的增大,演算法執行時間的增長率和f(n)的增長率相同。