資料結構學習筆記day3

2021-08-22 18:17:47 字數 3348 閱讀 8768

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.多源最短路...