第五章第二節 雜湊開放定址法

2021-10-12 01:12:12 字數 2068 閱讀 5584

開放定址雜湊法:是另一種不用鍊錶解決衝突的方法,在開放定址雜湊演算法系統中,如果有衝突發生,那麼就要嘗試選擇另外的單元,直到找出空的單元為止。

公式 : hi ( x ) = ( hash(x)+f(i) ) mod tablesize

關鍵字x的位置等於 hash函式返回的位置在加上f(i)的位置 mod tablesize

線性探測法:f(i) = i ,這相當於逐個探測每個單元(必要時可以繞回)以查詢出乙個空單元。

平方探測法: f(i) = i²,平方探測法衝突函式為二次函式的探測方法。f(i) = i²,防止多次衝突,形成一次聚集。

以下**是 平方探測法的實現:

資料結構和主要函式宣告

#include

#include

#include

#include

typedef

unsigned

int index;

typedef index postion;

typedef

char

* elementtype;

enum kindofentry

;//標記表中單元的狀態

struct hashentry

;typedef

struct hashentry cell;

struct hashtbl

;typedef

struct hashtbl *hashtable;

//函式宣告

hashtable initializetable

(int table)

;//初始化雜湊表

void

destroytable

(hashtable h)

;//銷毀雜湊表

postion find

(elementtype key, hashtable h)

;//查詢

void

insert

(elementtype key, hashtable h)

;//插入

void

delete

(elementtype key,hashtable h)

;//刪除

intnextprime

(int tablesize)

;//尋找素數函式

inthash

(const

char

*key,

int tablesize)

;//雜湊函式

主要函式:雜湊函式與素數函式

int

hash

(const

char

*key,

int tablesize)

return hashval % tablesize;

}int

nextprime

(int tablesize)}if

(flag ==1)

i++;}

return i;

}

初始化函式:對每個單元記錄乙個標記,方便程式設計,初始化時,把每個單元的標記置為empty

hashtable initializetable

(int tablesize)

return h;

}

查詢函式find

postion find

(elementtype key,hashtable h)

}return currentpos;

//返回位置

}

插入函式,刪除函式,銷毀函式

void

insert

(elementtype key, hashtable h)

}void

delete

(elementtype key, hashtable h)

}void

destroytable

(hashtable h)

第五章 第二節RAID 4 16

mdadm c creat 建立乙個新的陣列 a 啟用磁碟陣列 d detail 列印陣列裝置的詳細資訊 s scan 掃瞄配置檔案或 proc mdstat得到陣列缺失資訊 f 將裝置狀態定位故障 a add 新增裝置到陣列 同意建立裝置,如不加此引數時必須先使用mknod命令來建立乙個raid裝...

第五章 雜湊

雜湊表adt,只支援二叉樹查詢所允許的一部分操作。比如插入,刪除,查詢等。那些需要元素間排序資訊的操作將不會得到支援。比如findmin,findmax和線性時間按排序順序列印整個表的操作時不支援的。雜湊函式在理想狀態是能將任何兩個不同的關鍵字對映到不同的單元,但是這是不可能,因為關鍵字是無窮的,但...

第五章 5 1節練習

練習5.1 什麼是空語句?什麼時候會用到空語句?解答 引用 空語句就是含有乙個單獨分號的語句。引用 如果在程式的某個地方,語法上需要一條語句但是邏輯上不需要,此時應該使用空語句。練習5.2 什麼是塊?什麼時候會用到塊?解答 引用 復合語句是指用花括號括起來的語句和宣告的序列,復合語句也被稱作塊。引用...