1. 程式人生 > >SDUT3377資料結構實驗之查詢五:平方之雜湊表

SDUT3377資料結構實驗之查詢五:平方之雜湊表

不妨看看註釋吖

因為是刷題的原因,所以註釋沒有那麼的詳細,但是一切盡在註釋

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

using namespace std;

int main()
{
    int n,p;
    int hash[510],v[510];//定義儲存數值的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; int mid = z;//以當前的z值為中心 while(hash[mid]!=-1){//向兩邊尋找 mid = (z+f*d*d)%p;//每一次平方探測,都需要對錶長取餘 f = -f; if(f==1) 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; }