寒假補充專案-雜湊法的儲存與查詢(開發地址法)

不被看好的青春叫成長發表於2015-01-31
#include <iostream>
using namespace std;
int searchHash(int h[], int l, int key);
void insertHash(int h[], int l, int data);
int main()
{
    const int hashLength = 13;//雜湊表長度
    int hashTable[hashLength]={0};
    int m, n;
    //建立hash
    for (int i = 0; i < 6; i++)
    {
        cin>>n;
        insertHash(hashTable, hashLength, n);
    }
    cin>>m;
    int result = searchHash(hashTable,hashLength, m);
    if (result != -1)
        cout<<"已經在陣列中找到,位置為:" << result<<endl;
    else
        cout<<"沒有此原始"<<endl;
    return 0;
}

int searchHash(int h[], int l, int key)
{
    // 雜湊函式
    int hashAddress = key % l;
    // 指定hashAdrress對應值存在但不是關鍵值,則用開放定址法解決
    while (h[hashAddress] != 0 && h[hashAddress] != key)
    {
        hashAddress = (++hashAddress) % l;
    }
    // 查詢到了開放單元,表示查詢失敗
    if (h[hashAddress] == 0)
        return -1;
    return hashAddress;
}
// 資料插入Hash表
void insertHash(int h[], int l, int data)
{
    // 雜湊函式
    int hashAddress = data % l;
    // 如果key存在,則說明已經被別人佔用,此時必須解決衝突
    while (h[hashAddress] != 0)
    {
        // 用開放定址法找到
        hashAddress = (++hashAddress) % l;
    }
    // 將data存入字典中
    h[hashAddress] = data;
}

相關文章