71 雜湊表的基本運算

2021-08-22 19:39:23 字數 2601 閱讀 5073

雜湊表的儲存結構定義如下:

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

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

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

typedef

int keytype; //關鍵字型別

typedef

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

typedef

struct

hashdata;

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

建立雜湊表(除留餘數法):

/*

建立雜湊表(除留餘數法)

hashtable ha : 雜湊表

keytype x : 建表的資料

int n : 關鍵字個數

int m : 雜湊表大小

int p : 除留餘數法中的p

*/void createht(hashtable ha,keytype x,int n,int m,int p)

for (i=0; i//插入關鍵字到雜湊表

insertht(ha, n1, x[i], p ,m);}}

插入及建表:

/*

插入及建表

hashtable ha : 雜湊表

int n : 雜湊表中當前已有關鍵字個數

keytype k :要插入的關鍵字

int p : 除留餘數法中的p

*/void insertht(hashtable ha,int &n,keytype k,int p , int m)

else

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

ha[adr].key=k;

ha[adr].count=i;

}n++;

}

刪除某個關鍵字:

/*

hashtable ha : 雜湊表

int n : 雜湊表中已有資料個數

keytype k : 要刪除的資料

int p : 除留餘數法中的p

*/int deleteht(hashtable ha,int p,int k,int &n , int m)

else

}

查詢某個關鍵字:

/*

查詢某個關鍵字

*/int searchht(hashtable ha,int p,keytype k , int m)

//查詢成功

if (ha[adr].key==k)

return adr;

//查詢失敗

else

return -1;

}

將關鍵字序列雜湊儲存到雜湊表中,雜湊表的儲存空間是乙個下標從0開始的一維陣列。,雜湊函式為:h(key)=(key×3) mod 7,處理衝突採用線性探測再雜湊法,要求裝填(載)因子為0.7。構造的雜湊表如下:n=7,α = 0.7 = n/m,則m = n/0.7 = 10

其他的關鍵字同理,最後形成的雜湊表結構如下圖所示:

在等概率情況下:

對於查詢成功的平均查詢長度來說,我們把雜湊表中每個關鍵字探測次數全部加起來,再除以關鍵字個數n(n = 7),就得到了查詢成功的平均查詢長度為:as

l成功=

(1+2

+1+1

+1+3

+3)/

7=12/

7=1.71

a sl

成功=(

1+2+

1+1+

1+3+

3)/7

=12/7

=1.71

。對於查詢不成功的平均長度,我們知道由於任一關鍵字k,h(k)的值只能是0~6之間,不成功的情況,共有7種:

從雜湊表結構圖來看,當雜湊位址為h(k) = 0時,需要比較3次才會出現查詢不成功的情況,h(k) = 1時需要比較2次才會出現查詢不成功的情況,以此類推…… 當h(k) = 2只需要比較1次,當h(k) = 5時就需要比較5次。

於是,我們把雜湊表中每個關鍵字的查詢不成功情況的比較次數全部加起來,再除以關鍵字個數n(n = 7),就得到了查詢不成功的平均查詢長度:as

l不成功

=(3+

2+1+

2+1+

5+4)

/7=18

/7=2.57

a sl

不成功=

(3+2

+1+2

+1+5

+4)/

7=18/

7=2.57

雜湊表(雜湊表) 四 雜湊表上的運算

雜湊表上的運算 雜湊表上的運算有查詢 插入和刪除。其中主要是查詢,這是因為雜湊表的目的主要是用於快速查詢,且插入和刪除均要用到查詢操作。1 雜湊表型別說明 define nil 1 空結點標記依賴於關鍵字型別,本節假定關鍵字均為非負整數 define m 997 表長度依賴於應用,但一般應根據。確定...

雜湊表(雜湊表)的基本操作

首先要說的是 雜湊表又叫雜湊表 雜湊只是英文hash的音譯,雜湊才是標準的翻譯 好吧,下面是源 如果有錯誤,請見諒!head.h include using namespace std 雜湊表又叫 雜湊表 其實音譯才叫做雜湊 typedef int keytype 元素型別定義 typedef st...

雜湊表基本操作

遍歷雜湊表需要用到dictionaryentry object,如下 for dictionaryentry de in ht ht為乙個hashtable例項 console.writeline de.key 對應於key value鍵值對 key console.writeline de.val...