[置顶] Hash查找,散列查找
//Hash.h #ifndef HASH_H
#define HASH_H
#define HASH_ARR_SIZE 100
#define FILL -1 #include <stdlib.h>
#include <stdio.h>
#include <string.h> struct _Node
{
int iFill;
int iValue;
struct _Node* pNext;
}; typedef _Node Node; typedef struct
{
Node* pHashArr;
int iArrSize;
int iSize;
}Hash; #endif
//Hash.c #include "Hash.h" Hash* CreateHashArr()
{
Hash* pHash = (Hash*)malloc( sizeof( Hash ) ); if( !pHash )
return NULL; pHash->iArrSize = HASH_ARR_SIZE;
pHash->iSize = 0;
pHash->pHashArr = (Node*)malloc( sizeof( Node ) * HASH_ARR_SIZE ); memset( pHash->pHashArr, 0, sizeof( Node ) * HASH_ARR_SIZE ); if( !pHash->pHashArr )
return NULL; return pHash;
} int GetIndex( int iValue )
{
return iValue % HASH_ARR_SIZE;
} Node* CreateNode( int iValue )
{
Node* pNode = (Node*)malloc( sizeof( Node ) ); if( !pNode )
return NULL; pNode->iValue = iValue;
pNode->pNext = NULL;
pNode->iFill = FILL; return pNode;
} int DoHash( Hash* pHash, int iValue )
{
if( !pHash )
return -1; int iIndex = GetIndex( iValue ); if( (pHash->pHashArr + iIndex)->iFill != FILL )
{
(pHash->pHashArr + iIndex)->iFill = FILL;
(pHash->pHashArr + iIndex)->iValue = iValue;
(pHash->pHashArr + iIndex)->pNext = NULL; pHash->iSize++;
}
else
{//collison
Node* pNode = (pHash->pHashArr + iIndex)->pNext; if( !pNode )
{
(pHash->pHashArr + iIndex)->pNext = CreateNode( iValue ); return 0;
} Node* pPrior = pNode; while( pNode )
{
pPrior = pNode;
pNode = pNode->pNext;
} pNode = CreateNode( iValue ); if( !pNode )
return -1; pPrior->pNext = pNode;
pHash->iSize++;
} return 0;
} Node* HashSearch( Hash* pHash, int iValue )
{
if( 0 == pHash->iSize )
return NULL; int iIndex = GetIndex( iValue ); if( (pHash->pHashArr + iIndex)->iFill != FILL )
return NULL;
else
{
if( (pHash->pHashArr + iIndex)->iValue == iValue )
return pHash->pHashArr + iIndex; Node* pNode = (pHash->pHashArr + iIndex)->pNext;
Node* pPrior = pNode; while( pNode && pPrior->iValue != iValue )
{
pPrior = pNode;
pNode = pNode->pNext;
} if( pNode->iValue == iValue )
return pNode; } return NULL;
} void PrintNode( Node* pNode )
{
if( pNode )
printf( "%d ", pNode->iValue );
} int main( int argc, char* argv[] )
{
Hash* pHash = CreateHashArr(); if( !pHash )
return -1; DoHash( pHash, 1 );
DoHash( pHash, 300 );
DoHash( pHash, 22 );
DoHash( pHash, 11 );
DoHash( pHash, 99 );
DoHash( pHash, 28 );
DoHash( pHash, 36 );
DoHash( pHash, 23 );
DoHash( pHash, 55 );
DoHash( pHash, 3 );
DoHash( pHash, 7 );
DoHash( pHash, 101 ); PrintNode( HashSearch( pHash, 1 ) );
PrintNode( HashSearch( pHash, 101 )); return 0;
}
[置顶] Hash查找,散列查找的更多相关文章
- 散列查找的C实现
概念 散列查找,类似与查英文字典的过程.如果我们要查找"zoo"(key)对应的释义(value),我们不会从第一页开始逐页查找(顺序查找),而是直接根据大致的推算(Hash函数) ...
- hash算法散列算法
Hash,一般翻译做“散列”,也有直接音译为“哈希”的,就是把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值.这种转换是一种压缩映射,也就是 ...
- 哈希--Hash,“散列”/“哈希”
哈希 Hash,翻译“散列”,音译为“哈希”,把任意长度的输入,通过散列算法,变换成固定长度的输出,该输出就是散列值.这种转换是一种压缩映射,也就是散列值的空间通常远小于输入的空间,不同的输入可能会散 ...
- Hash开散列 拉链法
#include<iostream> #include<cstdio> using namespace std; const int maxn=1000007; struct ...
- 【知识强化】第六章 查找 6.4 散列(Hash)表
本节课我们来学习一种新的查找方式叫做散列查找.什么是散列查找呢?在学习散列查找之前,一定要介绍一个基本概念就是散列表.那么学习散列表之前我们先来回忆一下之前所学习过的所有查找方式,那么无论是顺序查找还 ...
- 数据结构(四十二)散列表查找(Hash Table)
一.散列表查找的基础知识 1.散列表查找的定义 散列技术是在记录的存储位置和它的关键字之间建立一个确定的对应关系f,使得每个关键字key对应一个存储位置f(key).查找时,根据这个确定的对应关系找到 ...
- 数据结构---散列表查找(哈希表)概述和简单实现(Java)
散列表查找定义 散列技术是在记录的存储位置和它的关键字之间建立一个确定的对应关系f,是的每个关键字key对应一个存储位置f(key).查找时,根据这个确定的对应关系找到给定值的key的对应f(key) ...
- 密码学之Hash散列
一.简介 hash(散列.杂凑)函数,是将任意长度的数据映射到有限长度的域上. 直观解释起来,就是对一串数据m进行杂糅,输出另一段固定长度的数据h,作为这段数据的特征(指纹).也就是说,无论数据块m有 ...
- 散列之HashTable学习
1,什么是散列? 举个例子,在日常生活中,你将日常用品都放在固定的位置,当你下次需要该东西时,直接去该地方取它.这个过程就相当于散列查找. 若将它们随意杂乱无章地存放,当需要某件东西时,只能一个地方一 ...
随机推荐
- 【转】HttpServlet详解
[转]HttpServlet详解 Servlet的框架是由两个Java包组成:javax.servlet和javax.servlet.http. 在javax.servlet包中定义了所有的Servl ...
- 认识CSS样式
CSS全称为“层叠样式表 (Cascading Style Sheets)”,它主要是用于定义HTML内容在浏览器内的显示样式,如文字大小.颜色.字体加粗等. 如下列代码: p{ font-size: ...
- MySQL 查询数据
MySQL 查询数据 MySQL 数据库使用SQL SELECT语句来查询数据. 你可以通过 mysql> 命令提示窗口中在数据库中查询数据,或者通过PHP脚本来查询数据. 语法 以下为在MyS ...
- 《JavaScript高级程序设计》读书笔记
Javascript由以下三部分组成: 核心(ECMAScript) 文档对象模型(DOM) 浏览器对象模型(BOM) ECMAScript组成部分: 语法.类型.语句.关键字.保留子.操作符.对象. ...
- Starting and Stopping Oracle Fusion Middleware
指定用户名密码启动管理服务器 You can start and stop Oracle WebLogic Server Administration Servers using the WLST c ...
- 对于HttpContext.Current的一点理解
string[] userInfomationSplits = HttpContext.Current.User.Identity.Name.Split(new string[] { "\\ ...
- RemoteWebDriver使用说明
1. 本地代码使用RemoteWebDriver启动: public class Testing { public void myTest()throws Exception { WebDriver ...
- javascript-Cookie的应用
在我平时开发网页的过程中,可能涉及到浏览器本地的存储,现在主流的浏览器存储方式有:cookie,直接读取xml,userData,H5 的LocalStorage等,Cookie存储数据有限,但对于数 ...
- 解决WebService本地访问正常,远程无法访问的问题
发布webservice后部署到自己的服务器上,然后本机,外网远程访问都没事,在用户服务器上部署后只能本机访问,远端访问不了,通过网络搜索到下面方法,但改后仍然不行.原来在自己服务器部署时是在默认网站 ...
- 浅析a标签的4个伪类 .
关于伪类,大家最熟悉的还是a标签的4个伪类::link 有链接属性时:visited 链接地址已被访问过:active 被用户激活(在鼠标点击与释放之间发生的事件):hov ...