資料結構:問題的數學模型,是指互相之間存在著一種或多種特定關係的資料元素的集合
演算法:求解問題的策略,操作步驟
物理(儲存)結構:資料結構在計算機中的表示
設計資料結構的儲存結構時要存放所有資料元素的值和他們之間的邏輯關係
2種儲存結構:
順序儲存映像—順序儲存結構借助資料元素在儲存器中的相對位置來表示資料元素之間的邏輯關係
非順序儲存映像—鏈式儲存結構借助指示資料元素儲存位址的指標來表示資料元素之間的邏輯關係
抽象資料型別(abstract data type 簡稱adt) :是指乙個數學模型以及定義在此數學模型上的一組操作。
(d, r, p)三元組表示 :
d是資料物件
r是d上的關係的集合
p是d上的操作的集合
定義格式:
adt抽象資料型別名
adt抽象資料型別名
eg:adt complex
資料關係:r1=
基本操作:
assigncomplex( &z, v1, v2 )
操作結果:構造複數 z,其實部和虛部 分別被賦以引數 v1 和 v2 的值。
destroycomplex( &z)
操作結果:複數z被銷毀。
getreal( z, &realpart )
初始條件:複數已存在。
操作結果:用realpart返回複數z的實部值。
getimag( z, &imagpart )
初始條件:複數已存在。
操作結果:用imagpart返回複數z的虛部值。
add( z1,z2, &sum )
初始條件:z1, z2是複數。
操作結果:用sum返回兩個複數z1, z2 的 和值。
} adt complex
假設:z1和z2是上述定義的複數 ,則 add(z1, z2, z3) 操作的結果即為z3 = z1 + z2
抽象資料型別的表示和實現
抽象資料型別需要通過固有資料型別(高階程式語言中已實現的資料型別)來實現。
//儲存結構的定義typedef structcomplex;
//基本操作函式
// 構造複數 z,其實部和虛部分別被賦以引數 // z1 和 z2 的值
void assign(complex &z, float v1,folat v2);
//返回複數z實部值
float getreal(complex z);
// 返回複數 z 的虛部值
float getimag( complex z );
// 以 sum 返回兩個複數 z1, z2 的和
void add( complex z1, complex z2, complex &sum );
// -----基本操作的實現
void add( complex z1, complex z2, complex &sum )
演算法--求解特定問題的有限的操作步驟
演算法的5個特性:
有限性:不能無限制的操作下去,不能死迴圈
確定性:每一步必須有明確含義,不能有歧義
可行性:每一步利用現有技術是可以實現的
輸入:0個或多個輸入
輸出:1個或多個輸出
演算法的設計要求:
正確性健壯性
可讀性效率和低儲存量需求
效率—演算法的執行時間
儲存量—演算法執行過程中間所需要的最大儲存空間
度量方式
從演算法中選取一種對於所研究的問題來說是基本操作的原操作,以該基本操作重複執行的次數作為演算法的時間量度。
t(n)=o(f(n))
隨問題規模n的增大,演算法執行時間的增長率和f(n)的增長率相同,稱作演算法的漸近時間複雜度,簡稱時間複雜度。
原操作執行次數和包含它的語句的頻度相同。語句的頻度指的是該語句重複執行的次數。
o(1) —常量階
o( n ) —線性階
o( n 2) —平方階
o(log n ) —對數階
o(2n) —指數階
多項式階( o( n k) ),不希望用指數階
演算法的儲存空間需求:
空間複雜度可以作為演算法所需儲存空間的量度
s(n)=o(f(n))
若額外空間相對於輸入資料量來說是常數,則稱此演算法為原地工作。
如果所佔空間量依賴於特定的輸入,則除特別指明外,均按最壞情況來分析。
資料結構 資料結構緒論
資料結構是相互間存在一種或多種特定關係的資料元素的集合。程式設計 資料結構 演算法 資料結構是一門研究非數值計算的程式設計問題中的操作物件,以及他們之間的關係和操作等相關問題的學科。資料元素是組成資料的 有一定意義的基本單位,是計算機中通常作為整體處理,也被稱為記錄。乙個資料元素可以由若干個資料項組...
資料結構 緒論
程式 資料結構 演算法 資料 對客觀事物的符號表示。資料元素 資料的基本單位,由若干個資料項組成。資料項是資料不可分割的最小單位。資料物件 性質相同的資料元素的集合,使資料的乙個子集。資料元素是相互之間存在一種或多種特定關係的資料元素的集合。預定義常量型別 函式結果狀態嗎 define true 1...
資料結構緒論
資料結構是一種抽象資料的過程,這種能力是任何工具都無法代替的。學習資料結構的目的 資料結構是計算機專業的基礎,它為幾乎所有的軟體設計的基礎。同時他也培養求解複雜問題的能力。那麼,什麼是資料結構呢,這個概念是很重要的,人月神話上有一段話,說人們往往喜歡將問題分解開來處理,但是這樣一來造成了對整個問題的...