1 //定义一个散列表的结构 2 #define HASHSIZE 12 //初始大小 3 #define NULLKEY -32768//默认值,散列表中不可能出现的值 4 typedef struct 5 { 6 int *elem;//数据元素的基址,均匀分配数组 7 int ecount;//当前数据元素的个数 8 }HashTable; 9 //初始化散列表 10 int InitHashTable(HashTable *H) 11 { 12 H->ecount=HASHSIZE; 13 H->elem=(int *)malloc(HASHSIZE*sizeof(int)); 14 if(!H->elem)//生成空间失败 15 { 16 return -1; 17 } 18 for(i=0;i<HASHSIZE;i++) 19 { 20 H->elem[i]=NULLKEY; 21 } 22 return 0; 23 } 24 //使用除留余数法 25 int Hash(int key) 26 { 27 return key % HASHSIZE; 28 } 29 //插入关键字到数列表 30 void InsertHash(HashTable *H,int key)//传入散列表,待插入的关键字 31 { 32 int addr;//地址 33 addr=Hash(key);//余数作为地址(偏移地址) 34 while(H->elem[addr]!=NULLKEY){//如果不为空,则冲突出现,存放默认值 35 addr=(addr+1)%HASHSIZE;//开放定址法的线性探测 36 } 37 H->elem[addr]=key; 38 } 39 //数列表查找关键字 40 int SearchHash(HashTable H,int key,int *addr)//待查找的key,addr代表待查找的key存放的地址 41 { 42 ×addr=Hash(key);//查找效率直接为1 43 while(H.elem[*addr]!=key) 44 { 45 *addr=(×addr+1)%HASHSIZE; 46 if(H.elem[*addr]==NULLKEY||×addr==Hash(key))//H.elem[*addr]==NULLKEY代表查找到最后一个元素,×addr==Hash(key)//代表查找到第一个元素,即查找元素不存在 47 { 48 return -1; 49 } 50 } 51 return 0; 52 }
这世界上有一种鸟是没有脚的,它只能够一直的飞呀飞呀,飞累了就在风里面睡觉,这种鸟一辈子只能下地一次,那一次就是它死亡的时候。