中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久

利用PHP實現Hash表功能
來源:易賢網 閱讀:2198 次 日期:2015-08-18 15:09:20
溫馨提示:易賢網小編為您整理了“利用PHP實現Hash表功能”,方便廣大網友查閱!

Hash表作為最重要的數據結構之一,也叫做散列表。使用PHP實現Hash表的功能。PHP可以模擬實現Hash表的增刪改查。通過對key的映射到數組中的一個位置來訪問。映射函數叫做Hash函數,存放記錄的數組稱為Hash表。

Hash函數把任意長度的和類型的key轉換成固定長度輸出。不同的key可能擁有相同的hash。

Hash表的時間復雜度為O(1)

代碼如下:

<?php

class HashTable{

private $arr = array();

private $size = 10;

public function __construct(){

//SplFixedArray創建的數組比一般的Array()效率更高,因為更接近C的數組。創建時需要指定尺寸

$this->arr = new SplFixedArray($this->size);

}

/**

* Description: 簡單hash算法。輸入key,輸出hash后的整數

* @param $key

* @return int

*/

private function simpleHash($key){

$len = strlen($key);

//key中每個字符所對應的ASCII的值

$asciiTotal = 0;

for($i=0; $i<$len; $i++){

$asciiTotal += ord($key[$i]);

}

return $asciiTotal % $this->size;

}

/**

* Description: 賦值

* @param $key

* @param $value

* @return bool

*/

public function set($key, $value){

$hash = $this->simpleHash($key);

$this->arr[$hash] = $value;

return true;

}

/**

* Description: 取值

* @param $key

* @return mixed

*/

public function get($key){

$hash = $this->simpleHash($key);

return $this->arr[$hash];

}

public function getList(){

return $this->arr;

}

public function editSize($size){

$this->size = $size;

$this->arr->setSize($size);

}

}

?>

下面對我們的HashTable進行測試。

代碼如下:

<?php

//測試1

$arr = new HashTable();

for($i=0; $i<15; $i++){

$arr->set('key'.$i, 'value'.$i);

}

print_r($arr->getList());

//SplFixedArray Object

//(

// [0] => value14

// [1] => value4

// [2] => value5

// [3] => value6

// [4] => value7

// [5] => value8

// [6] => value10

// [7] => value11

// [8] => value12

// [9] => value13

//)

//不同的key可能產生相同的hash值,那么賦值的時候后操作會覆蓋前操作。

//測試2

$arr->editSize(15);

for($i=0; $i<15; $i++){

$arr->set('key'.$i, 'value'.$i);

}

print_r($arr->getList());

//SplFixedArray Object

//(

// [0] => value14

// [1] => value4

// [2] => value0

// [3] => value1

// [4] => value2

// [5] => value3

// [6] => value10

// [7] => value11

// [8] => value12

// [9] => value13

// [10] => value14

// [11] => value9

// [12] =>

// [13] =>

// [14] =>

//)

?>

改變了值之后可以存放更多的元素。但是仍然存在不同的key可能產生相同的hash值,那么賦值的時候后操作會覆蓋前操作的問題。這種沖突的問題我們來用拉鏈法解決。

拉鏈法解決沖突。拉鏈法解決沖突的做法是將所有的相同Hash值的key放在一個鏈表中,比如key3和key14在hash之后都是0,那么在數組的鍵為0的地方存儲這兩個值,形式是鏈表。如果不能理解我的文字,請看下面的示例,看一下打印信息就明白了。拉鏈法是什么,就是鏈表。

創建一個HashNode類,用來存儲key和value的值,并且存儲相同hash的另一個元素。在同一條鏈上,查找越后的元素越費時。時間復雜度為O(n).

代碼如下:

<?php

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 NewHashTable{

private $arr;

private $size = 10;

public function __construct(){

$this->arr = new SplFixedArray($this->size);

}

private function simpleHash($key){

$asciiTotal = 0;

$len = strlen($key);

for($i=0; $i<$len; $i++){

$asciiTotal += ord($key[$i]);

}

return $asciiTotal % $this->size;

}

public function set($key, $value){

$hash = $this->simpleHash($key);

if(isset($this->arr[$hash])){

$newNode = new HashNode($key, $value, $this->arr[$hash]);

}else{

$newNode = new HashNode($key, $value, null);

}

$this->arr[$hash] = $newNode;

return true;

}

public function get($key){

$hash = $this->simpleHash($key);

$current = $this->arr[$hash];

while(!empty($current)){

if($current->key == $key){

return $current->value;

}

$current = $current->nextNode;

}

return NULL;

}

public function getList(){

return $this->arr;

}

}

?>

對我們新的HashTable進行測試

代碼如下:

<?php

//測試1

$newArr = new NewHashTable();

for($i=0; $i<30; $i++){

$newArr->set('key'.$i, 'value'.$i);

}

print_r($newArr->getList());

var_dump($newArr->get('key3'));

//SplFixedArray Object

//(

// [0] => HashNode Object

//(

// [key] => key23

// [value] => value23

// [nextNode] => HashNode Object

//(

// [key] => key14

// [value] => value14

// [nextNode] => HashNode Object

//(

// [key] => key3

// [value] => value3

// [nextNode] =>

// )

//

// )

//

// )

//

// [1] => HashNode Object

//(

// [key] => key24

// [value] => value24

// [nextNode] => HashNode Object

//(

// [key] => key15

// [value] => value15

// [nextNode] => HashNode Object

//(

// [key] => key4

// [value] => value4

// [nextNode] =>

// )

//

// )

//

// )

//

// [2] => HashNode Object

//(

// [key] => key25

// [value] => value25

// [nextNode] => HashNode Object

//(

// [key] => key16

// [value] => value16

// [nextNode] => HashNode Object

//(

// [key] => key5

// [value] => value5

// [nextNode] =>

// )

//

// )

//

// )

//

// [3] => HashNode Object

//(

// [key] => key26

// [value] => value26

// [nextNode] => HashNode Object

//(

// [key] => key17

// [value] => value17

// [nextNode] => HashNode Object

//(

// [key] => key6

// [value] => value6

// [nextNode] =>

// )

//

// )

//

// )

//

// [4] => HashNode Object

//(

// [key] => key27

// [value] => value27

// [nextNode] => HashNode Object

//(

// [key] => key18

// [value] => value18

// [nextNode] => HashNode Object

//(

// [key] => key7

// [value] => value7

// [nextNode] =>

// )

//

// )

//

// )

//

// [5] => HashNode Object

//(

// [key] => key28

// [value] => value28

// [nextNode] => HashNode Object

//(

// [key] => key19

// [value] => value19

// [nextNode] => HashNode Object

//(

// [key] => key8

// [value] => value8

// [nextNode] =>

// )

//

// )

//

// )

//

// [6] => HashNode Object

//(

// [key] => key29

// [value] => value29

// [nextNode] => HashNode Object

//(

// [key] => key10

// [value] => value10

// [nextNode] => HashNode Object

//(

// [key] => key9

// [value] => value9

// [nextNode] =>

// )

//

// )

//

// )

//

// [7] => HashNode Object

//(

// [key] => key20

// [value] => value20

// [nextNode] => HashNode Object

//(

// [key] => key11

// [value] => value11

// [nextNode] => HashNode Object

//(

// [key] => key0

// [value] => value0

// [nextNode] =>

// )

//

// )

//

// )

//

// [8] => HashNode Object

//(

// [key] => key21

// [value] => value21

// [nextNode] => HashNode Object

//(

// [key] => key12

// [value] => value12

// [nextNode] => HashNode Object

//(

// [key] => key1

// [value] => value1

// [nextNode] =>

// )

//

// )

//

// )

//

// [9] => HashNode Object

//(

// [key] => key22

// [value] => value22

// [nextNode] => HashNode Object

//(

// [key] => key13

// [value] => value13

// [nextNode] => HashNode Object

//(

// [key] => key2

// [value] => value2

// [nextNode] =>

// )

//

// )

//

// )

//

//)

//string(6) "value3"

?>

更多信息請查看IT技術專欄

更多信息請查看網絡編程
易賢網手機網站地址:利用PHP實現Hash表功能
由于各方面情況的不斷調整與變化,易賢網提供的所有考試信息和咨詢回復僅供參考,敬請考生以權威部門公布的正式信息和咨詢為準!

2026上岸·考公考編培訓報班

  • 報班類型
  • 姓名
  • 手機號
  • 驗證碼
關于我們 | 聯系我們 | 人才招聘 | 網站聲明 | 網站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機站點 | 投訴建議
工業和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網安備53010202001879號 人力資源服務許可證:(云)人服證字(2023)第0102001523號
云南網警備案專用圖標
聯系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關注公眾號:hfpxwx
咨詢QQ:1093837350(9:00—18:00)版權所有:易賢網
云南網警報警專用圖標
中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久
先锋资源久久| 亚洲砖区区免费| 亚洲精品日韩在线| 国产精品日韩电影| 一区二区三区四区在线| 欧美日韩麻豆| 亚洲网站视频| 国语对白精品一区二区| 欧美黄色大片网站| 亚洲欧美日韩精品久久久久| 一区二区三区在线观看欧美| 国产欧美欧美| 久久av一区| 亚洲狼人综合| 国产精品v片在线观看不卡| 欧美日韩免费观看一区| 久久激情一区| 亚洲欧美日韩国产综合在线| 亚洲国产精品激情在线观看| 国产欧美一区二区精品忘忧草| 久久精品一区二区三区四区| 亚洲午夜免费视频| 一区二区毛片| 在线观看福利一区| 国产偷久久久精品专区| 国产日韩欧美夫妻视频在线观看| 国产精品福利网| 国产精品久久久一区二区三区| 欧美午夜影院| 欧美日韩激情小视频| 欧美va天堂在线| 美女视频黄a大片欧美| 久久精品中文字幕一区二区三区| 亚洲淫性视频| 欧美精彩视频一区二区三区| 午夜精品一区二区三区电影天堂| 亚洲三级观看| 亚洲小视频在线| 久久精品国产欧美激情| 久久综合激情| 欧美日韩精品一区二区三区| 欧美激情第二页| 国产精品久久久一本精品| 欧美日韩一区二区三区在线 | 国产精品丝袜白浆摸在线| 美女视频一区免费观看| 欧美一区在线直播| 免费在线成人av| 欧美激情一区二区三区| 久久久精品五月天| 狂野欧美激情性xxxx| 欧美激情影院| 国产精品你懂的在线| 国产女同一区二区 | 亚洲午夜高清视频| 亚洲精品综合精品自拍| 亚洲激情影院| 亚洲欧美日韩在线不卡| 裸体歌舞表演一区二区| 欧美视频在线免费看| 国产欧美一区二区三区视频| 99国内精品久久久久久久软件| 狠狠色香婷婷久久亚洲精品| 国产一区二区日韩| 揄拍成人国产精品视频| 亚洲欧美国产高清va在线播| 欧美一区二区在线视频| 欧美激情一级片一区二区| 国产精品家教| 在线播放豆国产99亚洲| 亚洲女女女同性video| 国产精品日韩二区| 国产精品一区二区在线观看| 国产在线精品成人一区二区三区| 91久久在线观看| 99re成人精品视频| 99这里只有精品| 在线中文字幕日韩| 一本色道久久综合亚洲精品高清 | 亚洲国产婷婷综合在线精品| 亚洲国产高清一区| 亚洲专区一二三| 牛牛国产精品| 久久精品中文| 欧美另类videos死尸| 国内精品久久久久伊人av| 亚洲一区二区三区高清 | 欧美成人资源| 国产精品日韩在线| 亚洲黄色一区二区三区| 久久米奇亚洲| 欧美精品一区二区三区在线播放 | 国产精品a级| 国产一区在线免费观看| 一区二区三区日韩精品| 欧美国产乱视频| 欧美日韩国产免费观看| 亚洲韩国青草视频| 久久精品91久久香蕉加勒比| 欧美日本高清| 亚洲精品国产系列| 欧美1区免费| 亚洲一区精彩视频| 国产精品男gay被猛男狂揉视频| 在线亚洲伦理| 欧美色网在线| 欧美中文在线免费| 亚洲国产高清aⅴ视频| 久久影院午夜论| 亚洲国产成人tv| 国产精品久久久久aaaa樱花| 久久av一区| 在线日韩欧美视频| 欧美日韩国产成人高清视频| 午夜精品久久久久| 国产日韩欧美不卡| 欧美精品一区二区蜜臀亚洲| 99精品国产高清一区二区| 国产精品成人观看视频国产奇米| 午夜日韩激情| 亚洲欧美日韩综合| 亚洲电影av| 国产精品qvod| 久久久久久久久一区二区| 亚洲日本理论电影| 国产亚洲精品福利| 欧美日韩在线精品一区二区三区| 亚洲主播在线观看| 一区福利视频| 亚洲国产视频直播| 国产精品区一区二区三区| 欧美va亚洲va国产综合| 欧美影院视频| 亚洲精选视频免费看| 国产一区二区在线观看免费| 欧美精品videossex性护士| 亚洲香蕉在线观看| 亚洲精品一区二区三区福利| 午夜在线视频观看日韩17c| 亚洲免费观看高清完整版在线观看| 国产精品v欧美精品v日韩精品| 日韩视频精品在线| 国产一区高清视频| 欧美激情一区二区三区在线视频观看| 久久久久一区二区| 国产精品黄色在线观看| 在线观看不卡av| 久久精品国产免费看久久精品 | 一区二区视频欧美| 国产精品久久91| 日韩视频第一页| 99av国产精品欲麻豆| 亚洲高清免费视频| 亚洲欧美日韩在线高清直播| 另类av一区二区| 欧美婷婷六月丁香综合色| 欧美丝袜一区二区| 欧美成年网站| 欧美一区二区三区视频免费| 黄色欧美成人| 国产精品老牛| 欧美电影免费观看| 国产欧美一区二区三区久久 | 久久夜精品va视频免费观看| 亚洲激情在线观看视频免费| 欧美日韩精品| 卡通动漫国产精品| 欧美久久久久久蜜桃| 欧美精品国产一区二区| 亚洲你懂的在线视频| 欧美影院成人| 国产精品白丝jk黑袜喷水| 欧美成人亚洲成人日韩成人| 黄色日韩在线| 免费亚洲一区二区| 一区二区三区在线视频播放| 亚洲欧美国产77777| 欧美视频免费在线观看| 99精品久久| 欧美日韩在线播放三区四区| 亚洲精品视频免费在线观看| 欧美专区日韩专区| 国产精品国产三级国产| 午夜精品久久久久影视| 国产一区二区三区在线播放免费观看| 亚洲欧美偷拍卡通变态| 国产午夜精品久久久| 久久国产精品黑丝| 在线观看久久av| 久久综合五月天婷婷伊人| 日韩一级不卡| 国产精品爱久久久久久久| 欧美午夜片在线观看| 精品av久久707| 裸体女人亚洲精品一区| 欧美一区二区三区免费看 | 久久精品国产99| 欧美大片免费看| 日韩亚洲欧美精品| 老司机成人网|