哈希表建表、查找元素

//根据关键字和哈希函数,建立哈希表,基于线性探测再散列解决冲突方法。
void BuildHashTable(int cArryKey[], int cArryHashTable[], int nLen)
{
 int *pKey = cArryKey;
 int *pHashTable = cArryHashTable;
 bool *pMark = new bool[nLen];                 //标志是否位置已经被占
 memset(pMark, false, nLen);

 int nPos = 0;
 while (pKey != (cArryKey + nLen))
 {
  //除留余数法: Hash函数
  nPos = *pKey % nLen;
  while (1)
  {
   if (false == pMark[nPos])
   {
    pHashTable[nPos] = *pKey;
    pMark[nPos] = true;
    break;
   }
   else
   {
    ++ nPos;
    nPos = nPos % nLen;
   }
  }
  pKey ++;
 }

 if (pMark)
 {
  delete [] pMark;
  pMark = NULL;
 }
 return;
}

//查找
bool HashSearch(int cArryHashTable[], int nKeyValue, int nLen)
{
 int *pHashTable = cArryHashTable;
 int nPos = nKeyValue % nLen;
 for (int i=0; i<nLen; ++i)
 {
  if (pHashTable[nPos] == nKeyValue)
  {
   return true;
  }
  else
  {
   nPos ++;
   nPos = nPos % nLen;
  }
 }
 return false;
}


int main()
{
 int a[5] = {3,5,1,7,2};    //待查数组
 int b[5];                          //存放哈希表
 memset(b, 0, 5);
 BuildHashTable(a, b, 5);   //建立Hash Table
 bool bFind = HashSearch(b, 6, 5);
 if (bFind)
 {
  cout<<"Find"<<endl;
 }
 else
 {
  cout<<"Not Find"<<endl;
 }
 system("pause");
 return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值