哈希表(鏈地址法處理沖突)(1012)


 

Description
 

    采用除留余數法(H(key)=key %n)建立長度為n的哈希表,處理沖突用鏈地址法。建立鏈表的時候采用尾插法。

 

Input
    第一行為哈西表的長度;第二行為關鍵字的個數n; 第三行為關鍵字集合; 第四行為要查找的數據。

 

Output
    如果查找成功,輸出該關鍵字所在哈希表中的地址和比較次數;如果查找不成功,輸出-1。
 
Sample Input
1
2
3
4
5
13
13
16 74 60 43 54 90 46 31 29 88 77 78 79
16
 
Sample Output
 
 
 
1
3,1
 
 
#include<iostream>
#include<cstring>
using namespace std;
typedef struct node
{
    int data;
    struct node *next;
}Chain;
typedef struct
{
    Chain *head[100];
    int len, n;
}HashTable;
Chain * tail[100];
HashTable ha;
void InsertHT()
{
    int adr, k;
    Chain *p = new Chain;
    cin >> k;
    adr = k%ha.len;
    p->data = k;
    p->next = NULL;
    if (!ha.head[adr])
    {
        ha.head[adr] = p;
        tail[adr] = ha.head[adr];
    }
    else
    {
        tail[adr]->next = p;
        tail[adr] = p;
    }
}
void CreateHT(int len, int n)
{
    ha.len = len, ha.n = n;
    for (int i = 0; i < n; i++)
        ha.head[i] = NULL;
    for (int i = 0; i < n; i++)
        InsertHT();
}
void Search(int x)
{
    int adr = x%ha.len, flag = 0, cnt = 0;
    Chain *p = ha.head[adr];
    while (p)
    {
        cnt++;
        if (p->data == x)
        {
            flag = 1;
            break;
        }
        else
            p = p->next;
    }
    if (flag)cout << adr << ',' << cnt;
    else cout << "-1";
}
int main()
{
    int len, n, x;
    cin >> len >> n;
    CreateHT(len, n); 
    cin >> x;
    Search(x);
    return 0;
}
View Code

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM