首页 > 代码库 > 查找五:散列表查找

查找五:散列表查找

 1 //散列表 2 #include<iostream> 3 using namespace std; 4 #define NULLKEY -32768 5 #define HASHSIZE 12 //定义散列表长度为12 6  7 struct HashTable 8 { 9     int *elem;  //数据元素存储基址10     int count;  //当前数组元素个数11 };12 13 int m = 0; //散列表长度14 15 //初始化散列表16 bool InitHashTable(HashTable *H)17 {18     m = HASHSIZE;19     H->count = m;20     H->elem = new int[m];21     for(int i=0;i<m;i++)22         H->elem[i] = NULLKEY;23     return true;24 }25 26 //散列函数27 int Hash(int key)28 {29     return key % m;30 }31 32 //插入关键字进散列表33 void InsertHash(HashTable *H, int key)34 {35     int addr = Hash(key);36     while(H->elem[addr] != NULLKEY)37     {38         addr = (addr+1)%m;39     }40     H->elem[addr] = key;41 }42 43 //散列表查找关键字44 bool SearchHash(HashTable H, int key, int *addr)45 {46     *addr = Hash(key);47     while(H.elem[*addr] != key)48     {49         *addr = (*addr+1)%m;50         if(H.elem[*addr]==NULLKEY || *addr == Hash(key))51             return false;52     }53     return true;54 }55 56 int main()57 {58     int arr[HASHSIZE]={12,67,56,16,25,37,22,29,15,47,48,34};59     int i,p,key,result;60     HashTable H;61 62     key=39;63 64     InitHashTable(&H);65     for(i=0;i<m;i++)66          InsertHash(&H,arr[i]);67     68     result=SearchHash(H,key,&p);69     if (result)70         cout<<"查找 "<< key <<" 的地址为:"<<p<<endl;71     else72         cout<<"查找 "<< key <<" 失败。"<<endl;73 74     for(i=0;i<m;i++)75     {76         key=arr[i];77         SearchHash(H,key,&p);78         cout<<"查找 "<< key <<" 的地址为:"<<p<<endl;79     }80 81     return 0;82 }

 

查找五:散列表查找