资源简介
开放地址法哈希表构建,使用纯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个文件信息
相关资源
- VS2019c++装换为动态链接库DLL.doc
- C++程序编写的MFC控件的打地鼠游戏
- MFC图像直方图均衡化、锐化、中值滤
- VC++ MFC制作数字时钟、图形时钟、秒表
- C++经典教材
- 魂斗罗游戏源码
- C语言景区景点查询系统包含19484条景
- 基于vc++6.0的rs232串口通信课程设计
- 超市管理系统c++2
- MFC个人通讯录管理系统
- C语言程序设计 谭浩强pdf
- 舒尔特方格MFC源码
- Qt5 C++ GUI Programming Cookbook pdf 0分
- C语言实现一个编译器-编译原理南开大
- 《无线通信系统仿真-c++使用模型》源
- c_user.RTEMS_C语言用户指南.双语.V20131
- Frogs_MFCCs.csv
- 读取txt文件数据,根据数据画曲线绝
- VC++ MFC 游戏手柄Joystick 编程
- 基于员工培训管理系统
- C++Templates 侯捷 带书签 pdf
- c++ mfc客户端服务器端文件传输
- 二维离散小波变换的C语言实现任意级
- C++电梯协调运行自动模拟
- 《C++ GUI Qt 4编程》第二版源代码
- C++超市管理系统程序
- MFC实现矩阵的操作
- 东北大学C++课程设计实验、代码及实
- c++课程设计模拟计算器含源代码、文
- 简单的VC++基于MFC计算器
评论
共有 条评论