再雜湊之後雜湊函式要重新計算。
// kaifangliaobiao.cpp : 定義控制台應用程式的入口點。//使用平方探測解決衝突問題時,雜湊表至少空一半時,總能插入乙個新的元素
#include "stdafx.h"
#includeusing namespace std;
#ifndef hashquad
typedef unsigned int index;
typedef index position;
struct hashtbl;
typedef struct hashtbl *hashtable;
hashtable initializetable(int tablesize);
void destroytable(hashtable h);
position find(int key, hashtable h);
void insert(int key, hashtable h);
int retrieve(position p, hashtable h);
hashtable rehash(hashtable h);
#endif // !hashquad
#define mintablesize 10
enum kindofentry;
struct hashentry
;typedef struct hashentry cell;
struct hashtbl
;int hash(int key, int tablesize)
int nextprime(int n)
if (isprime)
return n; }}
hashtable initializetable(int tablesize) //初始化函式
h = (hashtable)malloc(sizeof(hashtbl)); //1.初始化雜湊表位址
if (h == null)
cout << "out of space";
h->tablesize = nextprime(tablesize); //2.用素數初始化雜湊表大小
h->thecell = (cell *)malloc(sizeof(cell)*h->tablesize); //3.申請乙個表頭
if (h->thecell == null)
cout << "out of space";
for (i = 0; i < h->tablesize; i++)
h->thecell[i].info = empty; //4.為每乙個表項賦狀態空
return h;
}position find(int key, hashtable h) //用平方探測雜湊法查詢
return currentpos;
}void insert(int key, hashtable h)
}hashtable rehash(hashtable h) //再雜湊
free(oldcells);
return h;
}int main()
開放定址法實現雜湊表
使用分離鏈結法實現雜湊表時需要額外的空間來儲存指標,而且需要給新單元動態分配空間,導致演算法的速度減慢。開放定址法一次分配表的大小,可以使用線性雜湊,平方雜湊,雙重雜湊等等方法,這些方法除了雜湊函式不相同之外,對於雜湊表的大小要求也不一樣。平方雜湊需要使表的大小是儲存元素的兩倍以上,這樣總能找到空槽...
雜湊表(上) 開放定址法
概述 雜湊表,又稱雜湊表,hash表。雜湊表是一種特殊的資料結構,它同陣列 鍊錶以及二叉排序樹等相比較有很明顯的區別,它能夠快速定位到想要查詢的記錄,而不是與表中存在的記錄的關鍵字進行比較來進行查詢。這個源於雜湊表設計的特殊性,它採用了函式對映的思想將記錄的儲存位置與記錄的關鍵字關聯起來,從而能夠很...
雜湊 開放定址法
引起雜湊衝突的乙個原因可能是 雜湊函式設計不夠合理。雜湊函式設計原則 雜湊函式的定義域必須包括需要儲存的全部關鍵碼,而如果雜湊表允許有m個位址時,其值域必須在0到m 1之間 雜湊函式計算出來的位址能均勻分布在整個空間中 雜湊函式應該比較簡單 閉雜湊typedef int keytype typede...