Hash链表
<?php /*
+------------------------------------------------------------------------------
| datetime 2013-10-29 12:46:44
+------------------------------------------------------------------------------
| author baijm
+------------------------------------------------------------------------------
*/ /**
* hash节点的数据结构,用类模拟一个数据链表
*/
class HashNode { public $key;
public $value;
public $nextNode; public function __construct($key, $value, $nextNode = NULL) {
$this->key = $key;
$this->value = $value;
$this->nextNode = $nextNode;
} } class HashTable { private $buckets; //用于存储数据的数组
private $size = 10; //数组的大小 public function __construct() {
//$this->buckets=new SplFixedArray($this->size);
$this->buckets = array();
} /**
* 计算key的hash值,使用最简单的hash算法
* @param type $key
* @return type
*/
private function hashFunc($key) {
for ($i = 0, $len = strlen($key); $i < $len; $i++) {
$hashVal+=ord($key{$i});
}
return $hashVal % $this->size;
} public function insert($key, $value) {
$index = $this->hashFunc($key);
if (isset($this->buckets[$index])) {
$nextNode = new HashNode($key, $value, $this->buckets[$index]);
} else {
$nextNode = new HashNode($key, $value);
}
$this->buckets[$index] = $nextNode;
} public function find($key) {
$index = $this->hashFunc($key);
$current = $this->buckets[$index];
while(isset($current)){
if($current->key==$key){
break;
}else{
$current=$current->nextNode;
}
}
print_r($this->buckets);
return $current->value;
} } $hash = new HashTable();
$hash->insert('key1', 'value1');
$hash->insert('key12', 'value12');
$hash->find('key1');
$hash->find('key12');
?>
Hash链表的更多相关文章
- PAT 1032 Sharing[hash][链表][一般上]
1032 Sharing (25)(25 分) To store English words, one method is to use linked lists and store a word l ...
- hash+链表
简单的hash就是用数组加链表的组合来实现,这种hash很简单,但hash的思想在那. #ifndef _HASH_H_ #define _HASH_H_ typedef struct _ListNo ...
- Hash链表转换为红黑树,和树转换为链表的条件
链表转换位红黑树 两个条件,必须同时满足两个条件才能进行转换 条件1:单个链表长度大于等于8 条件2:hashMap的总长度大于64个.且树化的节点位置不能为空 从源码看 条件一: 在putVal() ...
- Redis通用操作(适用于String,Hash,链表等)
keys pattern 查询相应的key 在redis里,允许模糊查询key 有3个通配符 *, ? ,[] *: 通配任意多个字符 ?: 通配单个字符 []: 通配括号内的某1个字符 redis ...
- 深度剖析linux内核万能--双向链表,Hash链表模版
我们都知道,链表是数据结构中用得最广泛的一种数据结构,对于数据结构,有顺序存储,数组就是一种.有链式存储,链表算一种.当然还有索引式的,散列式的,各种风格的说法,叫法层出不穷,但是万变不离其中,只要知 ...
- 深入分析 Linux 内核链表--转
引用地址:http://www.ibm.com/developerworks/cn/linux/kernel/l-chain/index.html 一. 链表数据结构简介 链表是一种常用的组织有序数据 ...
- 深入分析 Linux 内核链表
转载:http://www.ibm.com/developerworks/cn/linux/kernel/l-chain/ 一. 链表数据结构简介 链表是一种常用的组织有序数据的数据结构,它通过指 ...
- 字符串经典的hash算法
1 概述 链表查找的时间效率为O(N),二分法为log2N,B+ Tree为log2N,但Hash链表查找的时间效率为O(1). 设计高效算法往往需要使用Hash链表,常数级的查找速度是任何别的算法无 ...
- linux2.6内核链表
一. 链表数据结构简介 链表是一种常用的组织有序数据的数据结构,它通过指针将一系列数据节点连接成一条数据链,是线性表的一种重要实现方式.相对于数组,链表具有更好的动态性,建立链 ...
随机推荐
- Android studio打开项目时出现 gradle download 无反应
在使用android studio 新建 项目的时候,会发现一直无法下载 gradle程序一直卡住不动,原因是被墙了. 解决方法: 到gradle官网下载离线包,解压后将bin路径加入Path环境变量 ...
- Android Studio教程--给Android Studio安装Genymotion插件
打开Android Studio,依次[File]-[Settings] 在打开的settings界面里找到plugins设置项,点击右侧的“Browser..”按钮 在搜索栏里输入genymotio ...
- C语言ASCII码、运算符优先级、转义字符
- android 加载自定义图片并在图片上绘图
来源:毕设 关键词:Bitmap Canvas //毕设中需要自定义室内地图,并且在地图上绘制轨迹 //此处是一个测试Demo,实现图片的加载和记录手指在屏幕上的运动轨迹 图片的载入 使用系统提供的内 ...
- 关于RichTextField2.0表情显示错乱的问题!
flex4.5和4.6在textField.getCharBoundaries()这个方法的返回结果上是不一样的.getCharBoundaries()方法只会返回被渲染出来的文字的边框信息,也就是说 ...
- 【转】简析 .NET Core 构成体系
前文介绍了.NET Core 在整个.NET 平台所处的地位,以及与.NET Framework的关系(原文链接),本文将详细介绍.NET Core 框架的构成和各模块主要功能,以及如何实现跨平台. ...
- ASP.NET features need application service database support
搭建的web程序出现如上图所示的错误 原因程序使用以下ASP.NET 特性 Membership (the SqlMembershipProvider class). Role management ...
- mysql metadata lock(二)
上一篇<mysql metadata lock(一)>介绍了为什么引入MDL,MDL作用以及MDL锁导致阻塞的几种典型场景,文章的最后还留下了一个小小的疑问.本文将更详细的介绍MDL,主要 ...
- mysql执行计划
烂sql不仅直接影响sql的响应时间,更影响db的性能,导致其它正常的sql响应时间变长.如何写好sql,学会看执行计划至关重要.下面我简单讲讲mysql的执行计划,只列出了一些常见的情况, ...
- PowerBI 引入时间智能
简介 Power BI Desktop -是一款由微软发布的自助式商业智能工具,功能强大.易于使用.其中还可以通过微软云连多个数据源并且使用数据源来创建可视化表盘. 但是几乎所有的BI都需要展示如何随 ...