實驗目的:深入理解靜態查詢表的建立過程,以及順序排序和折半排序演算法的基本思想
實驗內容:
1.建立靜態查詢表
2.實現順序排序函式並完成功能測試
3.實現折半排序函式並完成功能測試
步驟1:包含必要的函式庫,對結構體lnode中的常量和資料型別進行具體定義
1 #include 2 #include 34 //將關鍵字的型別例項化為整型
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 在靜態鍊錶中查詢元素...