hash表的创建
功能:创建一个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表的创建的更多相关文章
- hdu 5183 hash表
BC # 32 1002 题意:给出一个数组 a 和一个数 K ,问是否存在数对( i , j ),使 a i - a i + 1 +……+ (-1)j - i a j : 对于这道题,一开始就 ...
- 6.数组和Hash表
当显示多条结果时,存储在变量中非常智能,变量类型会自动转换为一个数组. 在下面的例子中,使用GetType()可以看到$a变量已经不是我们常见的string或int类型,而是Object类型,使用-i ...
- PHP数组/Hash表的实现/操作、PHP变量内核实现、PHP常量内核实现 - [ PHP内核学习 ]
catalogue . PHP Hash表 . PHP数组定义 . PHP变量实现 . PHP常量实现 1. PHP Hash表 0x1: 基本概念 哈希表在实践中使用的非常广泛,例如编译器通常会维护 ...
- 深入了解STL中set与hash_set,hash表基础
一,set和hash_set简介 在STL中,set是以红黑树(RB-Tree)作为底层数据结构的,hash_set是以哈希表(Hash table)作为底层数据结构的.set可以在时间复杂度为O(l ...
- 【转载】一步一步写算法(之hash表)
转载自:http://blog.csdn.net/feixiaoxing/article/details/6885657 [ 声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaox ...
- Redis中hash表中的field的value自增可以用hincrby
Redis HINCRBY命令用于增加存储在字段中存储由增量键哈希的数量.如果键不存在,新的key被哈希创建.如果字段不存在,值被设置为0之前进行操作. 回复整数,字段的增值操作后的值. redis ...
- 【数据结构】非常有用的hash表
这篇博客的目的是让尚未学会hash表的朋友们对hash表有一个直观的理解,并且能根据本文定义出属于自己的第一个hash表,但算不上研究文,没有深究概念和成功案例. 什么是has ...
- 一步一步写算法(之hash表)
[ 声明:版权全部,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] hash表,有时候也被称为散列表.个人觉得,hash表是介于链表和二叉树之间的一种中间结构.链 ...
- 数组和Hash表
数组和Hash表 当显示多条结果时,存储在变量中非常智能,变量类型会自动转换为一个数组. 在下面的例子中,使用GetType()可以看到$a变量已经不是我们常见的string或int类型,而是Obje ...
随机推荐
- "SOAP WebService " 和 "RESTful WebService" 的定义分别是什么???
一个个来,要知道区别,首先得知道各自的意义及用途web service采用Xml传输结构化的数据,轻量级跨平台而soap则是一种基于http的应用层通讯协议,同样采用xml编码,只不过soap又更进了 ...
- win7+SQL2008无法打开物理文件 操作系统错误 5:拒绝访问 SQL Sever
今天在win7+SQL2008的环境下操作分离附加数据库,分离出去然后再附加,没有问题.但是一把.mdf文件拷到其它文件夹下就出错,错误如下:无法打开物理文件 "E:\db\MyDB.mdf ...
- iOS面试题整理(一)
代码规范 这是一个重点考察项,曾经在微博上发过一个风格纠错题: 也曾在面试时让人当场改过,槽点不少,能够有 10 处以上修改的就基本达到标准了(处女座的人在这方面表现都很优秀 一个区分度很大的面试题 ...
- MySQL 删除数据表
MySQL 删除数据表 MySQL中删除数据表是非常容易操作的, 但是你再进行删除表操作时要非常小心,因为执行删除命令后所有数据都会消失. 语法 以下为删除MySQL数据表的通用语法: DROP TA ...
- MySQL 管理
MySQL 管理 启动及关闭 MySQL 服务器 首先,我们需要通过以下命令来检查MySQL服务器是否启动: ps -ef | grep mysqld 如果MySql已经启动,以上命令将输出mysql ...
- css expression explaination
http://blogs.msdn.com/b/ie/archive/2008/10/16/ending-expressions.aspx 据说已经被弃用的IE css写法,为了修复一些IE8及老版本 ...
- LXPanel自定义添加应用程序到快速启动栏
LXPanel是Linux下LXDE项目的一个桌面面板软件.我一开始接触的时候,对于自己自定义的程序到快速启动栏绕了很多弯路,这里记录下,防止以后自己忘了.还有一点就是很多时候,panel下的应用程序 ...
- JavaScript-学习一加载不动
为先加载的js后加载的html 加载完js运行时因为未加载html的原因导致找不到js所控制的元素 所以解决的方法就是把js放到控制元素的下方 或者html的底部 做成函数的时候可以放在头部,也就是说 ...
- JavaScript-学习一获取表单的值
<!DOCTYPE html><html><head> <meta charset="utf-8"> <title>he ...
- Oracle高级查询,事物,过程及函数
一 数值函数 数值 abs,ceil,floor,round,trunc字符串 instr,substr SQL>SELECT 'ABS':'|| ABS(-12.3) FROM DUAL; 运 ...