開雜湊—首先對關鍵碼集合用雜湊函式計算雜湊位址,具有相同位址的關鍵碼歸於同一子集合,每乙個子集合稱為乙個桶,各個桶中的元素通過乙個單鏈表鏈結起來,各鍊錶的頭結點儲存在雜湊表中。 (負載因子a不超過0.5;如果超出必須考慮增容 )
struct hashbucknode //結點
hashbucknode,
*phashbucknode;
typedef
struct hashbuck //雜湊表
hashbuck,
*phashbuck;
void
hashinit
(phashbuck phashbuck,
int capacity)
//賦初始值
for(
int i =
0; i < capacity; i++
) phashbuck->_hasharr = ph;
phashbuck->_size =0;
phashbuck->_capacity = capacity;
}
int
hashfun
(hbddtatype data,
int capacity)
phashbucknode hbbynode
(hbddtatype data)
newnode->_data = data;
newnode->_next =
null
;return newnode;
}
int
hashempty
(phashbuck phashbuck)
int
hashsize
(phashbuck phashbuck)
擴容void
dilatation
(phashbuck phashbuck)
//新空間的狀態為空
for(
int i =
0; i < capacity; i++
)//拷貝元素
for(
int i =
0; i < phashbuck->_capacity; i++
)else
//頭刪舊空間
((phashbuck->_hasharr)
+ i)
->_next = cur->_next;
free
(cur)
; cur =
null
; cur =
((phashbuck->_hasharr)
+ i)
->_next;}}
}//釋放舊空間
free
(phashbuck->_hasharr)
; phashbuck->_hasharr = ph;
phashbuck->_capacity = capacity;
}
插入void
hashinsert
(phashbuck phashbuck, hbddtatype data)
cur = cur->_next;
}//不存在
//建立結點,開闢空間
phashbucknode newnode =
hbbynode
(data)
;//頭插入鍊錶
//第乙個結點if(
null==(
(phashbuck->_hasharr)
+ address)
->_next)
else
phashbuck->_size++
;}
int
hashdelete
(phashbuck phashbuck, hbddtatype data)
pre = cur;
cur = cur->_next;
}return0;
}
int
hashfind
(phashbuck phashbuck, hbddtatype data)
cur = cur->_next;
}return0;
}
void
hashdestroy
(phashbuck phashbuck)}}
//釋放舊空間
free
(phashbuck->_hasharr)
; phashbuck->_hasharr =
null
; phashbuck->_capacity =0;
phashbuck->_size =0;
}
雜湊表(開雜湊)
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 而直接進行訪問的資料結構。也就是說,它通過把關 鍵碼值對映到表中乙...
雜湊表之開雜湊
了解雜湊基本看概念請看這裡 搜尋結構之雜湊 開雜湊完整 開雜湊 開雜湊每乙個位址的底層實現像乙個個的桶,所以又叫雜湊桶,同乙個桶中存放雜湊衝突的元素。通常,每個桶對應的鍊錶結點都很少,將n個關鍵碼通過某乙個雜湊函式,存放到雜湊表中的m個桶中,那麼每乙個桶中煉表的平均長度為n m,以搜尋平均長度為n ...