資源簡介
開放地址法哈希表構建,使用純C語言實現,利用了泛型的思想進行編寫。

代碼片段和文件信息
//?HashTry.cpp?:?定義控制臺應用程序的入口點。
//
#include?“stdafx.h“
typedef?struct?{
void *lpHashData;
INT elemSize;
DWORD adrsCode;
DWORD hashPos;
}?hashType;
//Def
void?CreateHashTable(hashType?*h?void?*hashData?int?paramSize?BOOL?IsChar?=?FALSE);
void?CreateHashTable(__out?hashType?**h?void?*ptrh?void?**hashData?int?paramSize?
int?dataCount?BOOL?IsChar?=?FALSE);
void?CreateHashTable(__out?hashType?**h?void?*ptrh?void?*hashData?int?paramSize?
int?dataCount);
void?DisposeHashtable(hashType?**h?int?dataCount);
void?OpenAdrsHashFunc(hashType?**h?int?dataCount);
//Imp
void?CreateHashTable(hashType?*h?void?*hashData?int?paramSize?BOOL?IsChar)
{
h->lpHashData?=?hashData;
if(IsChar?==?TRUE)
h->elemSize?=?paramSize?*?
(?paramSize?==?1???strlen((char*)hashData)?:?wcslen((wchar_t*)hashData)?);
else
h->elemSize?=?paramSize;
h->adrsCode?=?0;
for?(int?i?=?0;?i?elemSize?;?i++)
{
h->adrsCode?+=?((char*)hashData)[i];
}
h->hashPos?=?NULL;
}
void?CreateHashTable(__out?hashType?**h?void?*ptrh?void?**hashData?int?paramSize?
int?dataCount?BOOL?IsChar)
{
h?=?(hashType?**)malloc(sizeof(hashType*)?*?dataCount);?
memcpy(ptrh?&h?sizeof(char*));
for?(int?i?=?0;?i? {
h[i]?=?(hashType?*)malloc(sizeof(hashType));
CreateHashTable(h[i]?hashData[i]?paramSize?IsChar);
}
}
void?CreateHashTable(__out?hashType?**h?void?*ptrh?void?*hashData?int?paramSize?
int?dataCount)
{
h?=?(hashType?**)malloc(sizeof(hashType*)?*?dataCount);?
memcpy(ptrh?&h?sizeof(char*));
for?(int?i?=?0;?i? {
h[i]?=?(hashType?*)malloc(sizeof(hashType));
CreateHashTable(h[i]?(char*)hashData?+?paramSize?*?i?paramSize?0);
}
}
void?DisposeHashtable(hashType?**h?int?dataCount)
{
for?(int?i?=?0;?i? {
free?(h[i]);
}
free(h);
}
void?OpenAdrsHashFunc(hashType?**h?int?dataCount)
{
BOOL?*bState?=?(BOOL*)malloc(dataCount?*?sizeof(BOOL));
memset(bState?0?dataCount?*?sizeof(bool));
for?(int?i?=?0;?i? {
int?nIndex?=?h[i]->adrsCode?%?dataCount;
while?(bState[nIndex]?==?TRUE)
{
nIndex?=?(++nIndex)?%?dataCount;
}
bState[nIndex]?=?TRUE;
h[i]->hashPos?=?nIndex;
}
free(bState);
}
int?_tmain(int?argc?_TCHAR*?argv[])
{
wchar_t?*testHash[]?=?{L“Amy“?L“Bob“?L“Core“?L“Dog“?L“lele“?L“kunkun“?L“sst“?L“yzj“};
int?dataCount?=?8;?
hashType?**hashTemp?=?NULL;
CreateHashTable(hashTemp?&hashTemp?(void**)testHash?sizeof(wchar_t)??dataCount?TRUE);
/* printf(“%d\n“?hashTemp);*/
OpenAdrsHashFunc(hashTemp?dataCount);
printf(“OriginStr?AllSize?AdrsCode?HashCode\n“);
? for?(int?i?=?0;?i?? {
//printf(“%s?%d?%d?%d?\n“?(char*)hashTemp[i]->lpHashData?hashTemp[i]->elemSize?hashTemp[i]->adrsCode?hashTemp[i]->hashPos);
? wprintf(_T(“%s?%d?%d?%d?\n“)?(wchar_t*)hashTemp[i]->lpHashData?hashTemp[i]->elemSize?hashTemp[i]->ad
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????2538??2012-04-08?19:25??HashTry\HashTry\Debug\cl.command.1.tlog
?????文件??????40128??2012-04-08?19:25??HashTry\HashTry\Debug\CL.read.1.tlog
?????文件???????1212??2012-04-08?19:25??HashTry\HashTry\Debug\CL.write.1.tlog
?????文件????????406??2012-03-08?14:32??HashTry\HashTry\Debug\HashTry.exe.em
?????文件????????472??2012-03-08?14:34??HashTry\HashTry\Debug\HashTry.exe.em
?????文件????????381??2012-04-08?19:25??HashTry\HashTry\Debug\HashTry.exe.intermediate.manifest
?????文件?????????53??2012-04-08?19:25??HashTry\HashTry\Debug\HashTry.lastbuildstate
?????文件???????2153??2012-04-08?19:25??HashTry\HashTry\Debug\HashTry.log
?????文件??????13039??2012-04-08?19:25??HashTry\HashTry\Debug\HashTry.obj
?????文件????9043968??2012-04-08?19:19??HashTry\HashTry\Debug\HashTry.pch
?????文件????????204??2012-03-08?14:32??HashTry\HashTry\Debug\HashTry_manifest.rc
?????文件??????????2??2012-04-08?19:25??HashTry\HashTry\Debug\li
?????文件??????????2??2012-04-08?19:25??HashTry\HashTry\Debug\li
?????文件??????????2??2012-04-08?19:25??HashTry\HashTry\Debug\li
?????文件??????????2??2012-04-08?19:25??HashTry\HashTry\Debug\li
?????文件??????????2??2012-04-08?19:25??HashTry\HashTry\Debug\li
?????文件??????????2??2012-04-08?19:25??HashTry\HashTry\Debug\li
?????文件??????????2??2012-04-08?19:25??HashTry\HashTry\Debug\li
?????文件??????????2??2012-04-08?19:25??HashTry\HashTry\Debug\li
?????文件??????????2??2012-04-08?19:25??HashTry\HashTry\Debug\li
?????文件??????????2??2012-04-08?19:25??HashTry\HashTry\Debug\li
?????文件???????2830??2012-04-08?19:25??HashTry\HashTry\Debug\li
?????文件???????6384??2012-04-08?19:25??HashTry\HashTry\Debug\li
?????文件???????1336??2012-04-08?19:25??HashTry\HashTry\Debug\li
?????文件????????708??2012-04-08?19:25??HashTry\HashTry\Debug\mt.command.1.tlog
?????文件????????518??2012-04-08?19:25??HashTry\HashTry\Debug\mt.read.1.tlog
?????文件????????394??2012-04-08?19:25??HashTry\HashTry\Debug\mt.write.1.tlog
?????文件????????938??2012-03-08?14:34??HashTry\HashTry\Debug\rc.command.1.tlog
?????文件????????462??2012-03-08?14:34??HashTry\HashTry\Debug\rc.read.1.tlog
?????文件????????478??2012-03-08?14:34??HashTry\HashTry\Debug\rc.write.1.tlog
............此處省略21個文件信息
評論
共有 條評論