资源简介
开放地址法哈希表构建,使用纯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.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个文件信息
相关资源
- C++中头文件与源文件的作用详解
- 基于mfc的多线程文件传输
- C++多线程网络编程Socket
- VC++ 多线程文件读写操作
- C语言代码高亮html输出工具
- 猜数字游戏 c语言代码
- C语言课程设计
- 数字电位器C语言程序
- CCS FFT c语言算法
- 使用C语言编写的病房管理系统
- 通信过程中的RS编译码程序(c语言)
- 利用C++哈希表的方法实现电话号码查
- 计算机二级C语言上机填空,改错,编
- 用回溯法解决八皇后问题C语言实现
- 移木块游戏,可以自编自玩,vc6.0编写
- 简易教务管理系统c语言开发文档
- 操作系统课设 读写者问题 c语言实现
- 小波变换算法 c语言版
- C流程图生成器,用C语言代码 生成C语
- 3des加密算法C语言实现
- 简单的C语言点对点聊天程序
- 单片机c语言源程序(51定时器 八个按
- C++纯文字DOS超小RPG游戏
- 个人日常财务管理系统(C语言)
- MFC数字钟(基于VC6.0)
- c语言电子商务系统
- 小甲鱼C语言课件 源代码
- 将图片转换为C语言数组的程序
- 安科瑞智能电能表MODBUS通讯程序 VC6
- C语言实现的一个内存泄漏检测程序
评论
共有 条评论