hash表又称散列表,通过把关键字key经过hash函数映射到hash表中某个位置获取记录。

存放记录的数组又称为hash表,映射函数称为hash函数

下面是php中实现hash表的方法

<?php
/*hash表又称散列表,通过把关键字key经过hash函数映射到hash表中某个位置获取记录。
*
* 存放记录的数组就是hash表
*
*/
class hashtable{
private $buckets;//存储数据的数组
private $size = 10;//数组长度 public function __construct(){//hash表数组初始化
$this->buckets = new SplFixedArray($this->size);
}
/*=====hash函数=====*/
private function hashfun($key){
$strlen = strlen($key);
$hashval = 0;
for($i=0;$i<$strlen;$i++){
$hashval+=ord($key[$i]);
} return $hashval%$this->size;
} /*=====hash插入操作=====*/
public function insert($key,$val){
$index = $this->hashfun($key);
if(isset($this->buckets[$index])){
$newnode = new hashnode($key, $val,$this->buckets[$index]);//新增值在头部
}else{
$newnode = new hashnode($key, $val);
}
$this->buckets[$index] = $newnode;
} /*=====hash表取值操作=====*/
public function find($key){
$index = $this->hashfun($key);
$current = $this->buckets[$index]; while(isset($current)){
if($current->key == $key){
return $current->value;
}
$current = $current->nextnode;
}
return NULL;
}
} //拉链法解决冲突
class hashnode{
public $key;
public $value;
public $nextnode; public function __construct($key,$value,$nextnode=NULL){
$this->key = $key;
$this->value = $value;
$this->nextnode = $nextnode;
}
} $m = new hashtable();
$m->insert('key1', 'value1');
$m->insert('key12', 'value2');
echo $m->find('key1');
echo $m->find('key12'); ?>

  

php 实现hash表的更多相关文章

  1. hash表长度优化证明

    hash表冲突的解决方法一般有两个方向: 一个是倾向于空间换时间,使用向量加链表可以最大程度的在节省空间的前提下解决冲突. 另外一个倾向于时间换空间,下面是关于这种思路的一种合适表长度的证明过程: 这 ...

  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. hash-1.hash表和hash算法

    1.hash表 哈希表,也叫散列表,是根据关键码(Key)而直接访问的数据结构,也就是它把Key映射到表中一个位置来访问记录,即,把key计算成hashcode,把hashcode存到表中.这个把ke ...

  5. Hash表算法

    出处:http://blog.csdn.net/v_JULY_v 第一部分:Top K 算法详解问题描述百度面试题:    搜索引擎会通过日志文件把用户每次检索使用的所有检索串都记录下来,每个查询串的 ...

  6. HDU 5183 Negative and Positive (NP) ——(后缀和+手写hash表)

    根据奇偶开两个hash表来记录后缀和.注意set会被卡,要手写hash表. 具体见代码: #include <stdio.h> #include <algorithm> #in ...

  7. STL之map应用 +hash表(51nod 1095)

    题目:Anigram单词 题意:给出词典,再给出一些单词,求单词的Anigram数量. 思路:先将字串转换成哈希表,然后再用map链接. hash表构造方法汇总:http://www.cnblogs. ...

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

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

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

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

  10. HASH表原理(装)

    HASH表原理 大家都知道,在所有的线性数据结构中,数组的定位速度最快,因为它可通过数组下标直接定位到相应的数组空间,就不需要一个个查找.而哈希表就是利用数组这个能够快速定位数据的结构解决以上的问题的 ...

随机推荐

  1. activemq控制面板含义

    Name 消息队列的名称 Number Of Pending Messages 等待消费的消息数量,即未出队列的消息数量.可以理解为总接收数-总出队列数 (未持久化的话,重启acmq后会清零) Num ...

  2. C# 学习笔记(二) 时间格式化字符串

    1. 以下4种时间格式化符号输出的固定时间格式在各个区域设置中都应是相同的: 标准格式字符串 由 DateTimeFormatInfo.InvariantInfo 属性定义 自定义格式字符串 “O”或 ...

  3. MyEclipse中快速查看错误

    当代码中有错误的时候,MyEclipse会用红线标示错误.这个时候在错误地方按下F2就会显示错误详情了.

  4. 师范大学 e: skyscrapers

    #include<iostream> #include<stdio.h> #include<cstring> #include<cstdlib> usi ...

  5. 算法 - Catalan数 (卡特兰)

    http://blog.csdn.net/linhuanmars/article/details/24761459 https://zh.wikipedia.org/wiki/%E5%8D%A1%E5 ...

  6. HwUI下载地址

    下载地址:HwUI.0.0.1.zip

  7. package.json参数简单介绍

    概述: 每个项目的根目录下都会有一个package.json文件,定义了项目所需的模块,以及项目信息.执行npm install 命令会自动下载package.json中配置的模块,也就是配置项目的运 ...

  8. 计算mysql中某个字段某字符出现的次数,case when 和 截取字符的用法

    select LENGTH(type) - LENGTH(replace(type,'_','')) as counts from sa_log_olap where type like 'XX_XX ...

  9. RSA与ECC的比较

    第六届国际密码学会议对应用于公钥密码系统的加密算法推荐了两种:基于大整数因子分解问题(IFP)的RSA算法和基于椭圆曲线上离散对数计算问题(ECDLP)的ECC算法.RSA算法的特点之一是数学原理简单 ...

  10. 润乾在jetty应用服务器下的JNDI配置一

     一. 此处绑定的数据源是以 DBCP 为实现.首先必须将数据库驱动(这里用了MYSQL数据库)和DBCP所需要的 Jar 包复制到 Jetty 根目录的 lib 目录下.DBCP主要需要以下3个 ...