資料結構anyview 雜湊表問題

2021-09-02 11:50:14 字數 1525 閱讀 6913

【題目】假設雜湊表長為m,雜湊函式為h(x),用鏈位址法

處理衝突。試編寫輸入一組關鍵字並建造雜湊表的演算法。

雜湊表的型別chainhashtab定義如下:

#define num         7

#define nullkey    -1

#define success     1

#define unsuccess   0

#define duplicate  -1

typedef char hkeytype;

typedef struct hnode *hlink;

typedef struct chainhashtab;    // 鏈位址雜湊表

int hash(chainhashtab h, hkeytype k)

status collision(chainhashtab h, hlink &p) else return unsuccess;

}**********/

int buildhashtab(chainhashtab &h, int n, hkeytype es) 

/* 直接呼叫下列函式                             */

/* 雜湊函式:                                   */

/*    int hash(chainhashtab h, hkeytype k);     */

/* 衝突處理函式:                               */

/*    int collision(chainhashtab h, hlink &p);  */

return success;

}int i,k,j;

hlink p,q,p1;

h.rcd = (hlink*)malloc(7*sizeof(hlink));

h.size = 7;

h.count = 0;

for(i = 0;es[i] >= 'a';i++)

p = (hnode*)malloc(sizeof(hnode));

p->next = null;

p->data = es[i];

k = hash( h, p->data) ;

if(null !=h.rcd[k])

{  // 判斷其中是否有相同的hkeytype

p1 =  h.rcd[k];

while(null != p1)

{  //用j作為標記,如果j = 0表示沒有相同的,插入p

if(p1->data == p->data)

j = 1;

p1 = p1->next;

if(j == 0)

q =  h.rcd[k];

p->next = q;

h.rcd[k] = p;

j = 0;

else   

h.rcd[k] = p; //為什麼h.rcd[k]->next = p;不會報錯

h.count++;

資料結構 雜湊表

1.雜湊表的定義 元素的儲存位置和它的關鍵碼之間建立乙個確定的對應關係h,使得每個關鍵碼key和唯一的儲存位置h key 相對應。在查詢時,根據這個確定的對應關係找到給定值k的對映h k 若查詢集合中存在這個記錄,則必定在h k 的位置上,這種查詢技術稱為雜湊技術。採用雜湊技術將記錄儲存在一塊連續的...

資料結構 雜湊表

雜湊表的定義 雜湊表 hash table,也叫雜湊表 是根據關鍵碼值 key value 而直接進行訪問的資料結構。也就是說,它通過把 關鍵碼值對映到表中乙個位置來訪問記錄,以加快查詢的 速度。這個對映函式叫做雜湊函式,存放 記錄的陣列叫做雜湊表。雜湊函式的析構方法 餘數法 取關鍵字被某個不大於雜...

資料結構 雜湊表

3 雜湊函式 數字分析法 根據關鍵碼在各個位上的分布情況,選取分布比較均勻的若干位組成雜湊位址。適用情況 能預先估計出全部關鍵碼的每一位上各種數字出現的頻度,不同的關鍵碼集合需要重新分析。4 雜湊函式 平方取中法 對關鍵碼平方後,按照雜湊表大小,取中間的若干位作為雜湊位址 平方後擷取 適用情況 實現...