php 实现hash表

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');
 
 
?>
原文地址:https://www.cnblogs.com/myJuly/p/13577543.html