功能:创建一个hash table。假设有处理冲突,则採用再散列法放置该元素

代码參考《零基础学数据结构》

代码例如以下:

root@ubuntu:/mnt/shared/appbox/hash# cat hash.c
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <malloc.h> typedef int KeyType; typedef struct
{
KeyType key; /* key value */
int hi; /* hash counts */
}DataType; typedef struct
{
DataType *data;
int tableSize; /* hash table len */
int curSize; /* key value numbers */
}HashTable; void DisplayHash(HashTable *H, int m); /*
* H:hash table pointer
* m: hashtable len
* p: devided numbers
* hash: be hashed data (src data)
* n: number of key values
*/
void CreateHash(HashTable *H, int m, int p, int hash[], int n)
{
int i, sum, addr, di, k = 1;/* k: ͻ/ H->data = (DataType *)malloc(m * sizeof(DataType)); if(H->data == NULL)
{
printf("H->data is NULL!\n");
return ;
} for(i=0; i<m; i++)
{
H->data[i].key = -1;
H->data[i].hi = 0;
} for(i=0; i<n; i++)
{
sum = 0;
addr = hash[i] % p;
di = addr; if(H->data[addr].key == -1)
{
H->data[addr].key = hash[i];
H->data[addr].hi = 1; printf("[line:%d] addr:%d, i=%d, key=%d\n",__LINE__, addr, i, hash[i]);
}
else
{
do
{
di = (di + k)%m;
sum += 1;
}while((H->data[di].key != -1));
H->data[di].key = hash[i];
H->data[di].hi = sum + 1;
printf("[line:%d] di:%d, i=%d, key=%d\n",__LINE__, di, i, hash[i]);
}
} H->curSize = n;
H->tableSize = m; DisplayHash(H, m);
} void DisplayHash(HashTable *H, int m)
{
int i; printf("hash index: ");
for(i=0; i<m; i++)
printf("%-5d", i); printf("\n");
printf("key value: ");
for(i=0; i<m;i++)
printf("%-5d", H->data[i].key); printf("\n"); printf("hash times: ");
for(i=0; i<m; i++)
printf("%-5d", H->data[i].hi); printf("\n");
} int main(int argc, char *argv[])
{
int hash[] = {23, 35, 12, 56, 123, 39, 342, 90};
int m=11, p=11, n=8, pos; HashTable H; CreateHash(&H, m, p, hash, n); return 0;
}
root@ubuntu:/mnt/shared/appbox/hash#

输出结果:

root@ubuntu:/mnt/shared/appbox/hash# ./hash
[line:59] addr:1, i=0, key=23
[line:59] addr:2, i=1, key=35
[line:70] di:3, i=2, key=12
[line:70] di:4, i=3, key=56
[line:70] di:5, i=4, key=123
[line:59] addr:6, i=5, key=39
[line:70] di:7, i=6, key=342
[line:70] di:8, i=7, key=90
hash index: 0 1 2 3 4 5 6 7 8 9 10
key value: -1 23 35 12 56 123 39 342 90 -1 -1
hash times: 0 1 1 3 4 4 1 7 7 0 0

hash表的创建的更多相关文章

  1. hdu 5183 hash表

    BC # 32 1002 题意:给出一个数组 a 和一个数 K ,问是否存在数对( i , j ),使 a i   - a i + 1 +……+ (-1)j - i  a j : 对于这道题,一开始就 ...

  2. 6.数组和Hash表

    当显示多条结果时,存储在变量中非常智能,变量类型会自动转换为一个数组. 在下面的例子中,使用GetType()可以看到$a变量已经不是我们常见的string或int类型,而是Object类型,使用-i ...

  3. PHP数组/Hash表的实现/操作、PHP变量内核实现、PHP常量内核实现 - [ PHP内核学习 ]

    catalogue . PHP Hash表 . PHP数组定义 . PHP变量实现 . PHP常量实现 1. PHP Hash表 0x1: 基本概念 哈希表在实践中使用的非常广泛,例如编译器通常会维护 ...

  4. 深入了解STL中set与hash_set,hash表基础

    一,set和hash_set简介 在STL中,set是以红黑树(RB-Tree)作为底层数据结构的,hash_set是以哈希表(Hash table)作为底层数据结构的.set可以在时间复杂度为O(l ...

  5. 【转载】一步一步写算法(之hash表)

    转载自:http://blog.csdn.net/feixiaoxing/article/details/6885657 [ 声明:版权所有,欢迎转载,请勿用于商业用途.  联系信箱:feixiaox ...

  6. Redis中hash表中的field的value自增可以用hincrby

    Redis HINCRBY命令用于增加存储在字段中存储由增量键哈希的数量.如果键不存在,新的key被哈希创建.如果字段不存在,值被设置为0之前进行操作. 回复整数,字段的增值操作后的值. redis ...

  7. 【数据结构】非常有用的hash表

        这篇博客的目的是让尚未学会hash表的朋友们对hash表有一个直观的理解,并且能根据本文定义出属于自己的第一个hash表,但算不上研究文,没有深究概念和成功案例.         什么是has ...

  8. 一步一步写算法(之hash表)

    [ 声明:版权全部,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com] hash表,有时候也被称为散列表.个人觉得,hash表是介于链表和二叉树之间的一种中间结构.链 ...

  9. 数组和Hash表

    数组和Hash表 当显示多条结果时,存储在变量中非常智能,变量类型会自动转换为一个数组. 在下面的例子中,使用GetType()可以看到$a变量已经不是我们常见的string或int类型,而是Obje ...

随机推荐

  1. Razor视图引擎基础语法

    在VS2010中新建一个MVC3项目可以看出与以往的MVC2发生了很明显的变化 1.ASP.NET MVC3必要的运行环境为.NET 4.0 (想在3.5用MVC3,没门!) 2.默认MVC3模板项目 ...

  2. Android 自定义日历

    好久没来写博客了,这半年多发生了好多的事情,废话不多说,今天在公司里比较闲在,写一篇最近写的公司用到的控件——日历控件. 控件的功能比较少,根据需求只有选择开始时间和结束时间并返回时间段. 效果图如下 ...

  3. 【原】AVAudio录制,播放 (解决真机播放音量太小)

    原文链接:http://www.cnblogs.com/A--G/p/4624526.html 最近学习AVFoundation里的audio操作,最基本的录制和播放,参考了一个Code4pp的 一个 ...

  4. Swift - 19 - 字典的初始化

    //: Playground - noun: a place where people can play import UIKit // 注意: swift中的字典用的也是中括号, 和OC的大括号是不 ...

  5. 利用js加载本地图片预览功能

    直接上代码: 经测试,除safari6包括6以下不支持,其他均可正常显示. 原因:safari6不支持filereader,同时不能使用IE滤镜导致失效. fix: 可以利用canvas,解决safa ...

  6. Tomcat部署多个项目及相关配置

    1.配置多个项目 在tomcat的conf目录下,找到server.xml,在其中添加<Host>节点即可进行多个项目的部署 <Host name="localhost&q ...

  7. STL容器介绍

    STL的容器可以分为以下几个大类: 一:序列容器, 有vector, list, deque, string. 二 : 关联容器,     有set, multiset, map, mulmap, h ...

  8. table-css

  9. js移动设备手机跳转地址代码

    if(/AppleWebKit.*mobile/i.test(navigator.userAgent) || (/MIDP|SymbianOS|NOKIA|SAMSUNG|LG|NEC|TCL|Alc ...

  10. GFStableList Adapter

    STL中,list的优点是插入.删除性能极佳(时间复杂度只需O(1)即可),而且非常重要的在删除节点后,其迭代器不失效,但list查找却不擅长.map由于其实现的数据结构为rb-tree,因此,其插入 ...