散列表查询数组
散列表的查找步骤:dom
构造散列函数的两个基本原则:函数
计算简单;分布均匀spa
方法:指针
选取方法时可参照的方向:code
处理散列冲突的方法:blog
1 #define HASESIZE 12 2 #define NULLKEY -32768 3 4 //利用散列函数获得偏移地址,在数组中对偏移地址存储相应数据达到查找效率为O(1) 5 typedef struct{ 6 int *elem;//数据元素基址(首地址),动态分配数组; 7 int count;//当前数据元素个数 8 }HashTable; 9 10 int InitHashTable(HashTable *H){ 11 int i; 12 H->count=HASESIZE; 13 H->elem=(int *)malloc(HASESIZE*sizeof(int)); 14 if(!H->elem){ 15 return -1; 16 } 17 for(i=0;i<HASESIZE;i++){ 18 H->elem[i]=NULLKEY; 19 } 20 return 0; 21 } 22 23 //使用除留余数法 24 int Hash(int key){ 25 return key % HASESIZE; 26 } 27 28 //插入关键字到散列表 29 void InsertHash(HashTable *H,int key){ 30 int addr=Hash(key); 31 while(H->elem[addr]!=NULLKEY){//出现冲突 32 addr=(addr+1) % HASESIZE;//开放定址法处理 33 if(addr==Hash(key)){ 34 return ;//已近存满 35 } 36 } 37 H->elem[addr]=key; 38 } 39 40 //散列表查找关键字 41 int SearchHase(HashTable H,int key,int *addr){ 42 *addr=Hash(key); 43 while(H.elem[*addr]!=key){ 44 *addr=(*addr+1)%HASESIZE; 45 if(H.elem[*addr]==NULLKEY || *addr==Hash(key)){ 46 return -1; 47 } 48 } 49 return 0; 50 }