1. 程式人生 > >SDUT3379資料結構實驗之查詢七:線性之雜湊表

SDUT3379資料結構實驗之查詢七:線性之雜湊表

最後一個,線性探測hash表,跟上一個平方探測基本類似,觸類旁通型的。
詳情***看註釋***

#include <iostream>
#include <cstring>
#include <cstdio>

using namespace std;

int main()
{
    int n,p;
    int hash[1510],v[1510];//定義儲存數值的hash表,定義儲存數值在hash表中的位置的v陣列(位諧音v)
    while(cin>>n>>p){
        memset(hash,-
1,sizeof(hash));//給hash表賦初值-1 int j = 0;//j用來記錄位置函式v的增加 for(int i=0; i<n; i++){ int x; cin>>x; int z = x%p;//每一個值對錶長進行取餘 if(hash[z]==-1){//如果雜湊表的當前位置沒有值,則把數值放到此地,並記錄下數值在hash表中的位置,j++ hash[z] = x; v[j++] =
z; } else{//否則的話開始線性探測,直至探測到沒有值的位置 int f = 1; int d = 1;//此時的d是用於標記的 int mid = z;//以當前的z值為起點 while(hash[mid]!=-1){//向右尋找 if(hash[mid]==x){//如果hash表中的數值等於目前的數值,只需要記錄下當前的位置即可 v[j++
] = mid; d = 0;//標記為已經找到數值的位置 break; } mid = (z+f)%p;//線性探測也別忘了對錶長取餘 f++;//越來越遠 } if(d){ hash[mid] = x; v[j++] = mid; } } } for(int i=0; i<j; i++){ if(i==j-1) cout<<v[i]<<endl; else cout<<v[i]<<" "; } } return 0; }