資料結構例程 雜湊表及其運算的實現

2021-07-08 10:33:11 字數 2654 閱讀 2491

本文是[資料結構基礎系列(8):查詢]中第11課時[雜湊表——雜湊結構]和第12課時[雜湊表的運算]的例程。

#define maxsize 100 //定義最大雜湊表長度

#define nullkey -1 //定義空關鍵字值

#define delkey -2 //定義被刪關鍵字值

typedef

int keytype; //關鍵字型別

typedef

char * infotype; //其他資料型別

typedef

struct

hashdata;

typedef hashdata hashtable[maxsize]; //雜湊表型別

void insertht(hashtable ha,int &n,keytype k,int p) //將關鍵字k插入到雜湊表中

else

//發生衝突時採用線性探查法解決衝突

while (ha[adr].key!=nullkey && ha[adr].key!=delkey);

ha[adr].key=k;

ha[adr].count=i;

}n++;

}void createht(hashtable ha,keytype x,int n,int m,int p) //建立雜湊表

for (i=0; iint searchht(hashtable ha,int p,keytype k) //在雜湊表中查詢關鍵字k

if (ha[adr].key==k) //查詢成功

return adr;

else

//查詢失敗

return -1;

}int deleteht(hashtable ha,int p,int k,int &n) //刪除雜湊表中關鍵字k

else

//在雜湊表中未找到該關鍵字

return0;}

void dispht(hashtable ha,int n,int m) //輸出雜湊表

int main()

; int n=11,m=13,p=13,i,k=29;

hashtable ha;

createht(ha,x,n,m,p);

printf("\n");

dispht(ha,n,m);

i=searchht(ha,p,k);

if (i!=-1)

printf(" ha[%d].key=%d\n",i,k);

else

printf(" 未找到%d\n",k);

k=77;

printf(" 刪除關鍵字%d\n",k);

deleteht(ha,p,k,n);

dispht(ha,n,m);

i=searchht(ha,p,k);

if (i!=-1)

printf(" ha[%d].key=%d\n",i,k);

else

printf(" 未找到%d\n",k);

printf(" 插入關鍵字%d\n",k);

insertht(ha,n,k,p);

dispht(ha,n,m);

printf("\n");

return

0;}附:關於上面解法中存在的問題

1. 執行上面的程式,結果為

結果正確。

2.改換問題要求。還是這一組數,但雜湊函式改為h(k)=k%11,裝填因子選0.8,於是儲存單元m=11÷0.8=13。期望的結果是:

修改main函式,實施測試。改動如下:

int main()

; int n=11,m=13,p=11,i,k=29; //將p修改為11

hashtable ha;

createht(ha,x,n,m,p);……}

但執行結果中建立的雜湊表卻是:

從**中找其原因。解決衝突中重新定址的adr=(adr+1)%p應該是adr=(adr+1)%m,應該以儲存單元數m為依據,決定是否將下標返回到0。

本文開頭的課件截圖中,也明確示出 di

=(di

−1+1

)mod

m 。相關的insertht函式和searchht函式中對應的**,都應該改過。在修改中,儲存單元數m也應該作為引數傳遞給相關的函式。

感謝煙台大學計146-2班楊珺同學指出錯誤。本文討論至此,暫不做修改。這可能更有利於讀者從我的錯誤中得到提高。

資料結構例程 雜湊表及其運算的實現

問題及描述 檔名稱 graph.cpp 完成日期 2015年11月30日 版本號 codeblocks include define maxsize 100 定義最大雜湊表長度 define nullkey 1 定義空關鍵字值 define delkey 2 定義被刪關鍵字值 typedef int...

資料結構例程 雜湊表及其運算的實現

本文是 資料結構基礎系列 8 查詢 中第11課時 雜湊表 雜湊結構 和第12課時 雜湊表的運算 的例程。define maxsize 100 定義最大雜湊表長度 define nullkey 1 定義空關鍵字值 define delkey 2 定義被刪關鍵字值 typedef int keytype...

資料結構之雜湊例程

int hash const string key,int tableszie int hash const string key,int tablesize a hash routine for string objects.int hash const string key,int tables...