标签:
一、简述
静态查找表又分为顺序表、有序表、静态树表和索引表。以下只是算法的简单实现及测试,不涉及性能分析。
二、头文件
1 /** 2 author:zhaoyu 3 date:2016-7-12 4 */ 5 #include "6_3_part1_for_chapter9.h" 6 typedef struct { 7 int key; 8 }SElemType; 9 //静态查找表的顺序储存结构 10 #define ElemType SElemType 11 #define KeyType int 12 typedef struct { 13 ElemType *elem;//数据元素储存空间基址,0号留空 14 int length;//表长度 15 }SSTable; 16 //这里简化了键值 17 //实现 EQ 18 bool EQ(int a, int b) 19 { 20 return a==b?true:false; 21 } 22 bool LT(int a, int b) 23 { 24 return a<b?true:false; 25 } 26 //实现创建 SSTbale 27 void createSSTable(SSTable &T) 28 { 29 //先输入长度 length 30 //再输入 length 个 元素 31 scanf("%d", &T.length); 32 T.elem = (ElemType *)malloc((T.length + 10)*sizeof(int)); 33 for (int i = 1; i <= T.length; i++) 34 { 35 scanf("%d", &T.elem[i].key); 36 } 37 } 38 39 /** 40 algorithm 9.1 41 */ 42 int Search_Seq(SSTable ST, KeyType key) 43 { 44 //在顺序表 ST 中顺序查找关键值等于key的数据元素, 45 //若找到返回元素在表中位置,否则返回0 46 ST.elem[0].key = key; 47 int i; 48 for (i = ST.length; !EQ(ST.elem[i].key, key); --i); 49 return i; 50 51 } 52 53 /** 54 algorithm 9.2 55 */ 56 int Search_Bin(SSTable ST, KeyType key) 57 { 58 //在有序表 ST 中折半查找其关键字等于 key 的数据元素 59 //找到返回其位置,否则返回 0 60 int low = 1; 61 int high = ST.length; 62 while (low <= high) 63 { 64 int mid = (low + high) / 2; 65 if (EQ(key, ST.elem[mid].key)) 66 { 67 return mid; 68 } 69 else if (LT(key, ST.elem[mid].key)) 70 { 71 high = mid - 1; 72 } 73 else 74 { 75 low = mid + 1; 76 } 77 } 78 return 0; 79 }
三、CPP文件
1 #include "9_1_1.h" 2 int main(int argc, char const *argv[]) 3 { 4 SSTable T; 5 createSSTable(T); 6 printf("Search 9:\t%d\n", Search_Seq(T, 9)); 7 printf("Search 3:\t%d\n", Search_Bin(T, 3)); 8 return 0; 9 }
四、测试
标签:
原文地址:http://www.cnblogs.com/zhaoyu1995/p/5661116.html