• 大小: 2.62MB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2023-09-11
  • 语言: C/C++
  • 标签: C  泛型  哈希函数  

资源简介

开放地址法哈希表构建,使用纯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 < h->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 < dataCount; 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 < dataCount; 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 < dataCount; 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 < dataCount; 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 < dataCount; 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.embed.manifest

     文件        472  2012-03-08 14:34  HashTry\HashTry\Debug\HashTry.exe.embed.manifest.res

     文件        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\link-cvtres.read.1.tlog

     文件          2  2012-04-08 19:25  HashTry\HashTry\Debug\link-cvtres.write.1.tlog

     文件          2  2012-04-08 19:25  HashTry\HashTry\Debug\link.5752-cvtres.read.1.tlog

     文件          2  2012-04-08 19:25  HashTry\HashTry\Debug\link.5752-cvtres.write.1.tlog

     文件          2  2012-04-08 19:25  HashTry\HashTry\Debug\link.5752.read.1.tlog

     文件          2  2012-04-08 19:25  HashTry\HashTry\Debug\link.5752.write.1.tlog

     文件          2  2012-04-08 19:25  HashTry\HashTry\Debug\link.7392-cvtres.read.1.tlog

     文件          2  2012-04-08 19:25  HashTry\HashTry\Debug\link.7392-cvtres.write.1.tlog

     文件          2  2012-04-08 19:25  HashTry\HashTry\Debug\link.7392.read.1.tlog

     文件          2  2012-04-08 19:25  HashTry\HashTry\Debug\link.7392.write.1.tlog

     文件       2830  2012-04-08 19:25  HashTry\HashTry\Debug\link.command.1.tlog

     文件       6384  2012-04-08 19:25  HashTry\HashTry\Debug\link.read.1.tlog

     文件       1336  2012-04-08 19:25  HashTry\HashTry\Debug\link.write.1.tlog

     文件        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个文件信息

评论

共有 条评论