了解雜湊基本看概念請看這裡:搜尋結構之雜湊
開雜湊完整**:開雜湊
開雜湊每乙個位址的底層實現像乙個個的桶,所以又叫雜湊桶,同乙個桶中存放雜湊衝突的元素。
通常,每個桶對應的鍊錶結點都很少,將n個關鍵碼通過某乙個雜湊函式,存放到雜湊表中的m個桶中,那麼每乙個桶中煉表的平均長度為n/m,以搜尋平均長度為n/m的鍊錶代替搜尋長度為n的順序表,搜尋效率快的多。
應用鏈位址法處理溢位,需要增設鏈結指標,似乎增加了儲存開銷。事實上:
由於開位址法必須保持大量的空閒空間以確保搜尋效率,如二次探查法要求裝載因子a <= 0.7,而表項所佔空間又比指標大的多,
所以使用鏈位址法反而比開位址法節省儲存空間。
標頭檔案
#pragma once
#include
#include
#include
#include
#define size_t unsigned long
typedef char* datatype;
typedef size_t(*pdt)(datatype data);
typedef struct node
node,*pnode;
//雜湊表
typedef struct hashbucket
hashbucket;
//雜湊桶初始化
void hashinit(hashbucket* ht, int capacity, pdt _setdata);
//資料唯一的插入與刪除
void hashbuctetinsertunique(hashbucket* ht, datatype data);
void hashbucketdeleteunique(hashbucket* ht, datatype data);
//資料不唯一
void hashbuctetinsert(hashbucket* ht, datatype data);
void hashbucketdelete(hashbucket* ht, datatype data);
//查詢
pnode hashbucketfind(hashbucket* ht, datatype data);
//元素個數
int hashbucketsize(hashbucket* ht);
//銷毀
void destroyhashbuctet(hashbucket* ht);
//////
//////
//////
//////
//////
//////
//////
////
//雜湊函式
int hashfunc(hashbucket* ht, int data);
//建立新結點
pnode buynode(datatype data);
//列印
void hashbucketprint(hashbucket* ht);
size_t strtoint(const
char* str);
size_t datatoint(int data);
功能實現部分
#include"hashbucket.h"
//雜湊桶初始化
void
hashinit(hashbucket* ht, int capacity, pdt _setdata)
}//資料唯一的插入
void
hashbuctetinsertunique(hashbucket* ht, datatype
data)
pcur = buynode(data);
pcur->_pnext = ht->_table[hashaddr];
ht->_table[hashaddr] = pcur;
++ht->_size;
}//資料唯一的刪除
void
hashbucketdeleteunique(hashbucket* ht, datatype
data)
while (pcur)
else
}//判斷pcur是否找到了data,退出可能是找到了,或pcur為空
if (pcur)
}//資料不唯一
//資料相同插入
void
hashbuctetinsert(hashbucket* ht, datatype
data)
//刪除所有值為data的元素
void
hashbucketdelete(hashbucket* ht, datatype
data)
//後續不為空
while (pcur)
else
}}//查詢
pnode
hashbucketfind(hashbucket* ht, datatype
data)
return pcur;
}//元素個數
inthashbucketsize(hashbucket* ht)
//銷毀
void
destroyhashbuctet(hashbucket* ht)
}free(ht->_table);
ht->_size = 0;
ht->_capacity = 0;}//
//雜湊函式
inthashfunc(hashbucket* ht, int data)
//建立新結點
pnode
buynode(datatype
data)
//列印
void
hashbucketprint(hashbucket* ht)
else
pcur = pcur->_pnext;
}printf("\n");
}}
雜湊表(開雜湊)
hash table2.h pragma once include define hashmaxsize 1000 typedef int keytype typedef int valtype typedef size t hashfunc keytype key typedef struct h...
雜湊表 開雜湊
開雜湊很簡單。asl的計算忘了,找了兩道題都沒算對,這才是我不寫的真正原因 裡是裝13用的 include using namespace std 雜湊表 雜湊表 hash table,也叫雜湊表 是根據關鍵碼值 key value 而直接進行訪問的資料結構。也就是說,它通過把關 鍵碼值對映到表中乙...
雜湊表 開雜湊
開雜湊 首先對關鍵碼集合用雜湊函式計算雜湊位址,具有相同位址的關鍵碼歸於同一子集合,每乙個子集合稱為乙個桶,各個桶中的元素通過乙個單鏈表鏈結起來,各鍊錶的頭結點儲存在雜湊表中。負載因子a不超過0.5 如果超出必須考慮增容 struct hashbucknode 結點 hashbucknode,pha...