1樓:匿名使用者
//雜湊函式同時決定了雜湊表插槽的數量
#pragma once
// hash function class (abstract)
// 所有雜湊函式的基類
class hashfunction
;//雜湊函式基類的編譯檔案
#include ".\hashfunction.h"
hashfunction::hashfunction(unsigned int hashbound):
myhashbound( hashbound )
hashfunction::~hashfunction(void)
unsigned int hashfunction::gethashbound()
//***********************************=
//***********************************=
//***********************************=
//乙個簡單的使用取餘實現的雜湊函式
#pragma once
#include "hashfunction.h"
class divisionfunction :
public hashfunction
;#include ".\divisionfunction.h"
divisionfunction::divisionfunction(unsigned int hashbound) :
hashfunction( hashbound )
divisionfunction::~divisionfunction(void)
unsigned int divisionfunction::hashfunction( unsigned int key )
//***********************************=
//***********************************=
//***********************************=
//雜湊表的實現(標頭檔案)
#pragma once
#include "hashfunction.h"
//the hash table that resolves collision problem by chaining technic
//使用鍊錶解決碰撞問題的雜湊表
#include
using namespace std;
template
class llisthashtable
};//a hash slot data type
//乙個插槽的資料型別
//乙個插槽存放乙個鍊錶
struct hashslot
};private:
hashfunction * myhashfunc;
typedef hashslot * hashslotptr;
hashslotptr * myhashtable;
public:
llisthashtable( hashfunction * hashfunc );
~llisthashtable(void);
public:
tobject * hash_search( unsigned int key );
tobject * hash_delete( unsigned int key );
int hash_insert( tobject * object, unsigned int key );
void clear_and_destroy();
void clear();
void printhashtable();
};template
llisthashtable ::llisthashtable( hashfunction * hashfunc ):
myhashfunc ( hashfunc ),
myhashtable( null )}}
template
llisthashtable ::~llisthashtable(void)
delete myhashtable[i];
}delete (this->myhashtable);
}if( this->myhashfunc )delete myhashfunc;
}template
tobject * llisthashtable ::hash_search( unsigned int key )
searcher = searcher->next;
}return null;
}template
tobject * llisthashtable ::hash_delete( unsigned int key )
else
if( searcher->prev != null )
else
delete searcher;
return todelete;
}searcher = searcher->next;
}return null;
}template
int llisthashtable ::hash_insert( tobject * object, unsigned int key )
else
else
}return 0;
}template
void llisthashtable ::clear_and_destroy()
myhashtable[i]->thelisthead = null;
myhashtable[i]->thelisttail = null;}}
}template
void llisthashtable ::clear()
myhashtable[i]->thelisthead = null;
myhashtable[i]->thelisttail = null;}}
}template
void llisthashtable ::printhashtable()
cout << endl;}}
}//***********************************==
//***********************************==
//***********************************==
//主程式(測試用的)
#include "llisthashtable.h"
#include "divisionfunction.h"
int main()
for( i = 0; i < 100; i += 5 )
allisthash.printhashtable();
for( i = 0; i < 100; i += 2 )
allisthash.printhashtable();
allisthash.clear_and_destroy();
allisthash.printhashtable();
return 0;
}另外,虛機團上產品**,超級便宜
2樓:匿名使用者
只要你想用,都可以用
hash函式的主要應用有哪些
3樓:匿名使用者
hash演算法在資訊保安方面的應用主要體現在以下的3個方面:
1)檔案校驗
我們比較熟悉的校驗演算法有奇偶校驗和crc校驗,這2種校驗並沒有抗資料篡改的能力,它們一定程度上能檢測並糾正資料傳輸中的通道誤碼,但卻不能防止對資料的惡意破壞。
md5 hash演算法的"數字指紋"特性,使它成為目前應用最廣泛的一種檔案完整性校驗和(checksum)演算法,不少unix系統有提供計算md5 checksum的命令。
2)數字簽名
hash 演算法也是現代密碼體系中的乙個重要組成部分。由於非對稱演算法的運算速度較慢,所以在數字簽名協議中,單向雜湊函式扮演了乙個重要的角色。對 hash 值,又稱"數字摘要"進行數字簽名,在統計上可以認為與對檔案本身進行數字簽名是等效的。
而且這樣的協議還有其他的優點。
3)鑑權協議
如下的鑑權協議又被稱作"挑戰--認證模式:在傳輸通道是可被偵聽,但不可被篡改的情況下,這是一種簡單而安全的方法。
男生可能是單身 90有可能會用這種情侶頭像嗎?有什麼含義嗎
這個頭像很可愛.哈哈,我儲存了。這個頭像妹子較為喜歡吧,男生喜歡也不奇怪測,很可愛 哎,這個頭像有什麼特殊含義麼 乙個男生單身,會無緣無故用情侶頭像嗎 輝呀,我朋友經常這樣 我們要愛就愛到永遠 我們一起許下的誓言 我們刻在心間永不變 我們度過一年又一年 有可能是不知道是情頭 乙個男生,單身卻經常用情...
直女有可能會愛上同性嗎,直女有可能會愛上同性嗎?
直女不代表女t哦,這個完全不能夠劃等號的。不會的。無論怎麼愛也不如自己的老公。即使能瞞天過海愛上同性,最終還是會和心愛的男人結婚。如果真是直女就不可能,除非本來是雙性戀否則不可能。可能性很低,畢竟鋼鐵直女有掰彎實在是難。也不是完全沒有機會叭,但不顧一切就比較難了呢。加油鴨!不可復能的。因為直女,就是...
大腸癌早期,身體可能會有哪些表現
之前看到有讀者聊到腸癌的這個問題,說患上癌症就等於是被死神下達了生命倒計時的通知書。其實有一些癌症若是能夠抓住早期的一些症狀,及時發現的話,也是能夠達到有效 或者是有效的抑制的目的。而且我們看到一些在早期發現癌症,並且 的案例的時候,都會覺得他們非常的幸運。而今天我們要說的這一種癌症就是大腸癌。大腸...