大學實驗5 靜態查詢表的建立以及排序

2021-10-08 01:25:54 字數 3395 閱讀 9283

實驗目的:深入理解靜態查詢表的建立過程,以及順序排序和折半排序演算法的基本思想

實驗內容:

1.建立靜態查詢表

2.實現順序排序函式並完成功能測試

3.實現折半排序函式並完成功能測試

步驟1:包含必要的函式庫,對結構體lnode中的常量和資料型別進行具體定義

1 #include 2 #include 3 

4 //將關鍵字的型別例項化為整型

5 typedef int keytype;

6 //設定靜態表的最大長度

7 #define maxsize 20

步驟2:定義結構體sselement

1 /*利用結構體sselement實現靜態表中的每個元素*/

2 typedef structsselement;

步驟3:定義結構體sstable

1 /*利用結構體sstable實現靜態查詢表*/

2 3 typedef structsstable;

步驟4:定義函式initsstable(),用於對靜態查詢表進行初始化。

提示1:該函式利用malloc()函式為結構體的elem陣列分配記憶體空間。

提示2:elem陣列的0號單元用於儲存哨兵元素,1至maxsize號單元用於儲存靜態查詢表中的資料元素。

1 /*函式initsstable()用於初始化靜態表*/

2 3 int initsstable(sstable *st)

4 5

步驟5:定義函式sstableinsert(),用於向靜態查詢表中新增資料元素

1 /*函式sstableinsert()用於向靜態表中新增元素*/

2 int sstableinsert(sstable *st,int i,

3 sselement se)

4 13 else

14

22 }

步驟6:定義函式getsselem(),該函式的作用是對前兩個函式initsstable()、sstableinsert()的功能進行測試。

1 /*函式getsselem()用於返回靜態查詢表指定位置上的元素*/

2 int getsselem(sstable st,int i,sselement *se)

3

步驟7:在主函式main()中對前兩個函式initsstable()、sstableinsert()的功能進行測試。

測試**:

1 int flag;//該標誌表示函式執行是否成功

2 3 int i;//控制for迴圈的變數

4 5 sselement se;

6 7 sstable a;

8 9 initsstable(&a);//初始化靜態查詢表

10 11 /*向靜態查詢表中插入元素10,20,30,40,56,60,70,80*/

12 se.key=10;

13 sstableinsert(&a,1,se);

14 15 …

16 17 se.key=80;

18 sstableinsert(&a,8,se);

19

20 //測試插入的元素是否正確

21 printf("靜態查詢表中的元素為:\n");

22 for(i=1;i<=a.length;i++)

23

28 printf("\n");

步驟8:定義函式sstablesearch_seq(),實現順序查詢功能

1 /*函式sstablesearch_seq()用於實現靜態查詢*/

2 int sstablesearch_seq(sstable st,keytype key);

步驟9:對函式sstablesearch_seq()進行測試

測試**:

1 //在主函式中追加定義如下變數

2 int pos;//儲存匹配元素在靜態查詢表中的位置

3 int key;//儲存待查詢的關鍵字

4 //測試順序查詢函式sstablesearch_seq()

5 printf("函式sstablesearch_seq > 輸入待查詢的關鍵字:");

6 scanf("%d",&key);

7 pos=sstablesearch_seq(a,key);

8 if (pos==0) printf("函式sstablesearch_seq > 查詢失敗!\n");

9 else printf("函式sstablesearch_seq > 匹配元素在靜態查詢表中的位置為:%4d\n",pos);

步驟10:定義函式sstablesearch_bin(),實現順序查詢功能

1 /*函式sstablesearch_bin()用於實現折半查詢*/

2 int sstablesearch_bin(sstable st,keytype key);

步驟11:對函式sstablesearch_bin()進行測試

1 //測試折半查詢函式sstablesearch_bin()

2 printf("函式sstablesearch_bin > 輸入待查詢的關鍵字:");

3 scanf("%d",&key);

4 pos=sstablesearch_bin(a,key);

5 if (pos==0) printf("函式sstablesearch_bin > 查詢失敗!");

6 else printf("函式sstablesearch_bin > 匹配元素在靜態查詢表中的位置為:%4d\n",pos);

思考題1.如何程式設計實現9.1.4節的索引順序查詢。

1 /*函式sstablesearch_seq()用於實現靜態查詢*/

2 int sstablesearch_seq(sstable st,keytype key)

3 //此處需要執行空操作,否則會在for迴圈過程中不斷向外層返回位置i

8 /*

9 也可以採用書上的方式在for語句之後加分號,即

10 for(i=st.length;st.elem[i].key!=key;--i);

11 */

12 return i; //查詢失敗時返回0

13 }

14 /*函式sstablesearch_bin()用於實現折半查詢*/

15 int sstablesearch_bin(sstable st,keytype key)

16 27 return 0; //查詢失敗時返回0

28 }

靜態鍊錶的建立以及基本操作

include include define max 100 typedef int elemtype 定義每個節點的資料資訊 typedef struct node slnode 靜態鍊錶的定義 typedef struct static list sqlist int main 提示鍊錶的狀態。...

靜態順序表的實現建立 查詢 刪除

順序表概述 用順序儲存方法儲存的線性表 實現的功能 1 建立順序表並初始化 2 在順序表尾部插入元素 3 刪除尾部元素 4 從前往後輸出 5 在順序表頭插入元素 6 在任意位置插入元素 7 刪除順序表任意位置元素 8 刪除給定資料為元素 9 刪除所有為給定數的元素 10 排序 冒泡 選擇排序 靜態版...

靜態鍊錶的建立

typedefine.h 標頭檔案 define maxsize 100 typedef struct component,slinklist maxsize slinklist型別為1000長度的陣列 初始化靜態鍊錶 void initspace sl slinklist s 在靜態鍊錶中查詢元素...