1.3 抽象資料型別的表示與實現
抽象資料型別可通過固有資料型別來表示和實現,即利用處理器中已存在的資料型別來說明新的結構,用已經實現的操作來組合新的操作。
(1)預定義常量和型別:
//函式結果狀態**
#define true 1
#define false 0
#define ok 1
#define error 0
#define infeasible -1
#define overflow -2
//status 是函式的型別,其值是函式結果狀態**
typedef int status;
(2)資料結構的表示(儲存結構)用型別定義(typedef)描述。資料元u尿素型別約定為elemtype,由使用者在使用該資料型別時自行定義。
(3)基本操作的演算法都用以下形式的函式描述:
函式型別函式名(函式引數表)//函式名
除了函式的引數需要說明型別外,演算法中使用的輔助變數可以不作變數說明,必要時對其作用給予注釋。一般而言,a、 b、 c、 d、 e等用作資料元素名,i、 j、 k、 l、 m、 n等用作整型變數名,p、 q、 r等用作指標變數名。當函式返回值為函式結果狀態**時,函式定義為status型別。未來便於演算法描述,除了值呼叫方式外,增添了c++語言的引用呼叫的引數傳遞方式。在形參表,以&打頭的引數即為引用引數。
(4)賦值語句有
簡單賦值 變數名 = 表示式;
串聯賦值 變數名1 = 變數名2 = … = 變數名k = 表示式;
成組賦值 (變數名1,…,值k) = (表示式1,…,表示式k);
結構名 = 結構名;
結構名 = (值1,…,值k);
變數名 [ ] = 表示式;
變數名 [ 起始下標..終止下標 ] = 變數名 [ 起始下標..終止下標 ];
變換賦值 變數名 <–> 變數名;
條件賦值 變數名 = 條件表示式 ? 表示式t : 表示式f;
(5)選擇語句有
條件語句1 if(表示式) 語句;
條件語句2 if(表示式)語句;
else 語句;
開關語句1 switch(表示式)
開關語句2 switch
(6)迴圈語句有
for 語句 for(賦初值表示式序列;條件;修改表示式序列)語句;
while語句 while(條件)語句;
do-while語句 dowhile(條件);
(7)結束語句有
函式結束語句 return 表示式;
return;
case結束語句 break;
異常結束語句 exit(異常**);
(8)輸入和輸出語句有
輸入語句 scanf([ 格式串 ],變數1,…,變數n );
輸出語句 printf([ 格式串 ],表示式1,…,表示式n );
通常省略格式串。
(9)注釋
單行注釋 // 文字序列
(10)基本函式有
求最大值 max( 表示式1,…,表示式n )
求最小值 min( 表示式1,…,表示式n )
求絕對值 abs( 表示式 )
求不足整數值 floor( 表示式 )
求進製整數值 ceil( 表示式 )
判定檔案結束 eof( 檔案變數 )或 eof
判定行結束 eoln( 檔案變數 )或 eoln
(11)邏輯運算約定
與運算 && : 對於 a && b,當a的值為0時,不再對b求值。
或運算 || :對於 a || b,當a的值為非0時,不再對b求值額
例 1 抽象資料型別triplet的表示和實額
//—- 採用動態分配的順序儲存結構 —-
typedef elemtype *triplet; //由inittriplet分配3個元素儲存空間
//—- 基本操作的函式原型說明 ——–
status inittriplet( triplet &t,elemtype v1, elemtype v2, elemtype v3);
//操作結果:構造了三元組t,元素e1,e2和e3分別被賦以引數v1,v2和v3的值。
status destroytriplet( triplet &t);
//操作結果:三元組被銷毀。
status get( triplet &t, int i,elemtype &e);
//初始條件:三元組t已存在,1≤ i ≤ 3.
//操作結果:用e返回t的第 i 元的值。
status put( triplet &t, int i,elemtype &e);
//初始條件:三元組t已存在,1≤ i ≤ 3.
//操作結果:改變t的第 i 元的值為e。
status isascending( triplet t);
//初始條件:三元組t已存在。
//操作結果:如果t的3個元素按公升序排列,則返回1,否則返回0
status isdescending( triplet t);
//初始條件:三元組t已存在。
//操作結果:降3個元素按降序排列,則返回1,否則返回0。
status max( triplet t, elemtype &e);
//初始條件:三元組t已存在。
//操作結果:用e返回t的3個元素中的最大值。
status min( triplet t, elemtype &e);
//初始條件:三元組t已存在。
//操作結果:用e返回t的3個元素中的最小值。
// — 基本操作的實現 —0
status inittriplet( triplet &t,elemtype v1,elemtype v2,elemtype v3) //inittriplet
status destroytriplet (triplet &t ) //destroytriplet
status get (triplet t, int i, elemtype &e) //get
status put (triplet &t, int i, elemtype &e) //putstatus isascending (triplet t) //isascending
status isdescending (triplet t) //isdescending
status max(triplet t , elemtype &e) //max
status min(triplet t , elemtype &e) //min
《大話資料結構》筆記 day3
獲得鍊錶的第i個資料的思路 宣告乙個結點 p 指向鍊錶第乙個結點,初始化 j 從 1 開始 當j i 時,就遍歷鍊錶,讓p的指標向後移動,不斷指向下一結點,j 累加 1 若到鍊錶末尾 p 為空,則說明第 i 個元素不存在 否則查詢成功,返回結點 p 的資料 核心思想 工作指標後移 插入 s next...
資料結構學習筆記3
目錄 線性表的定義 線性表的抽象資料型別 順序儲存結構的插入與刪除 線性表的鏈式儲存結構 單鏈表的讀取 單鏈表的插入與刪除 單鏈表的整表建立 單鏈表的整表刪除 單鏈表的結構與順序儲存結構的優缺點 靜態鍊錶 迴圈鍊錶 雙向鍊錶 上述就是我學習的某本教材中關於線性表學習的目錄,這時候我們來找關係 1 什...
資料結構學習筆記3
一.最短路徑問題 1.單源最短路徑 1 迪傑斯特拉演算法 dijkstra 有權圖的單源最短路徑的模版 path陣列初始化為 1,dist陣列初始化為正無窮 void dijkstra vertex s 2 無權圖的單源最短路徑的模版 void unweighted vertex s 2.多源最短路...