婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > php實現映射操作實例詳解

php實現映射操作實例詳解

熱門標簽:青白江地圖標注 銅川電話機器人價格 聊城電話外呼系統公司 德陽中江如何申請400開頭電話 AI電話機器人OEM貼牌 智能電話機器人好公司門薩維 辦理重慶400電話 江蘇電商外呼系統運營商 沛縣400電話辦理

本文實例講述了php實現映射操作。分享給大家供大家參考,具體如下:

映射

映射,或者射影,在數學及相關的領域經常等同于函數。基于此,部分映射就相當于部分函數,而完全映射相當于完全函數。

映射(Map)是用于存取鍵值對的數據結構(key,value),一個鍵只能對應一個值且鍵不能重復。

實現

映射的實現方式可以使用鏈表或二叉樹實現。

鏈表實現:

?php
/**
 * 接口 字典
 * Interface Dict
 * @package app\models
 */
Interface Dict
{
  public function set( $key , $value );
  public function get( $key );
  public function isExist( $key );
  public function delete($key);
  public function getSize();
}
class DictLinkList implements Dict
{
  protected $size=0;
  public $key;
  public $value;
  public $next;
  public function __construct($key=null,$value=null,$next=null)
  {
    $this->key = $key;
    $this->value = $value;
    $this->next = $next;
  }
  public function set($key,$value){
    $node = $this;
    while( $node  $node->next ){
      if( $node->next->key==$key ){
        $node->next->value = $value;
        return $node->next;
      }
      $node = $node->next;
    }
    $node->next = new self($key,$value,$node->next);
    $this->size++;
    return $node->next;
  }
  public function get($key){
    $node = $this;
    while($node){
      if( $node->key ==$key ){
        return $node->value;
      }
      $node = $node->next;
    }
    throw new \Exception('cannot found key');
  }
  public function isExist($key)
  {
    $node = $this;
    while($node){
      if( $node->key ==$key ){
        return true;
      }
      $node = $node->next;
    }
    return false;
  }
  public function delete($key)
  {
    if( $this->size==0)
      throw new \Exception('key is not exist');
    $node = $this;
    while($node->next){
      if( $node->next->key == $key ){
        $node->next = $node->next->next;
        $this->size--;
        break;
      }
      $node = $node->next;
    }
    return $this;
  }
  public function getSize()
  {
    return $this->size;
  }
}

測試:

?php
    $dict = new DictLinkList();
    $dict->set('sun',111); //O(n)
    $dict->set('sun',222);
    $dict->set('w',111);
    $dict->set('k',111);
    var_dump($dict->get('w'));  //O(n)
    var_dump($dict->isExist('v'));  //O(n)
    var_dump($dict->delete('sun'));  //O(n)
    var_dump($dict->getSize());
/******************************************/
//111
//false
//true
//2

二叉樹實現

?php
class DictBtree implements Dict
{
  public $key;
  public $value;
  public $left;
  public $right;
  private $size;
  public function __construct($key=null,$value=null)
  {
    $this->key = $key;
    $this->value = $value;
    $this->left = null;
    $this->right = null;
    $this->size = 0;
  }
  public function set( $key , $value ){
    if( $this->size ==0 ){
      $node = new static( $key,$value );
      $this->key = $node->key;
      $this->value = $node->value;
      $this->size++;
    }else{
      $node = $this;
      while($node){
        if( $node->key == $key ){
          $node->value = $value;
          break;
        }
        if($node->key>$key){
          if($node->left==null){
            $node->left = new static( $key,$value );
            $this->size++;
            break;
          }
          $node = $node->left;
        }else{
          if($node->right==null){
            $node->right = new static( $key,$value );
            $this->size++;
            break;
          }
          $node = $node->right;
        }
      }
    }
    return $this;
  }
  public function get( $key ){
    if( $this->size ==0 )
      throw new \Exception('empty');
    $node = $this;
    while($node) {
      if ($node->key == $key) {
        return $node->value;
      }
      if ($node->key > $key) {
        $node = $node->left;
      } else {
        $node = $node->right;
      }
    }
    throw new \Exception('this key not exist');
  }
  public function isExist( $key ){
    if( $this->size ==0 )
      return false;
    $node = $this;
    while($node) {
      if ($node->key == $key) {
        return true;
      }
      if ($node->key > $key) {
        $node = $node->left;
      } else {
        $node = $node->right;
      }
    }
    return false;
  }
  public function delete($key){
    //找到元素,尋找元素左邊最小元素
    $node = $this->select($key);
    if( $node->right!=null ){
      $node1 = $node->selectMin($node->right);
      //替換當前node
      $node->key = $node1->key;
      $node->value = $node1->value;
      //刪除$node->right最小元素,獲取最終元素賦給$node->right
      $nodeMin = $this->deleteMin($node->right);
      $node->right = $nodeMin;
    }else{
      $node1 = $node->selectMax($node->left);
      $node->key = $node1->key;
      $node->value = $node1->value;
      $nodeMax = $this->deleteMax($node->left);
      $node->left = $nodeMax;
    }
    return $this;
  }
  protected function deleteMin( $node ){
//    if( $this->size ==0 )
//      throw new \Exception('empty');
//    $prev = new static();
//    $prev->left = $node;
//    while($prev->left->left!=null){
//
//      $prev = $prev->left;
//    }
//    $prev->left = $prev->left->right;
    if( $node->left==null ){
      $rightNode = $node->right;
      $node->right = null;
      $this->size--;
      return $rightNode;
    }
    $node->left = $this->deleteMin($node->left);
    return $node;
  }
  protected function deleteMax($node){
    if( $node->right==null ){
      $leftNode = $node->left;
      $node->left = null;
      $this->size--;
      return $leftNode;
    }
    $node->right = $this->deleteMax($node->right);
    return $node;
  }
  public function getSize(){
    return $this->size;
  }
  public function select($key){
    $node = $this;
    while($node){
      if($node->key==$key){
        return $node;
      }
      if ($node->key > $key) {
        $node = $node->left;
      } else {
        $node = $node->right;
      }
    }
    throw new \Exception('this key not exist');
  }
  public function selectMin( $node ){
    while($node->left){
      $node = $node->left;
    }
    return $node;
  }
  public function selectMax( $node ){
    while($node->right){
      $node = $node->right;
    }
    return $node;
  }
}

復雜度分析

鏈表 O(n)

二分搜索樹 O(log n)

更多關于PHP相關內容感興趣的讀者可查看本站專題:《PHP數據結構與算法教程》、《php程序設計算法總結》、《php字符串(string)用法總結》、《PHP數組(Array)操作技巧大全》、《PHP常用遍歷算法與技巧總結》及《PHP數學運算技巧總結》

希望本文所述對大家PHP程序設計有所幫助。

您可能感興趣的文章:
  • 詳解PHP的Laravel框架中Eloquent對象關系映射使用
  • ThinkPHP中公共函數路徑和配置項路徑的映射分析
  • 回答PHPCHINA上的幾個問題:URL映射
  • 解密ThinkPHP3.1.2版本之模塊和操作映射
  • PHP實現路由映射到指定控制器
  • 淺析php設計模式之數據對象映射模式
  • PHP面向對象之領域模型+數據映射器實例(分析)
  • 老生常談PHP面向對象之標識映射
  • PHP實現的數據對象映射模式詳解
  • PHP數據對象映射模式實例分析

標簽:濟寧 山南 三亞 南寧 赤峰 鷹潭 迪慶 烏魯木齊

巨人網絡通訊聲明:本文標題《php實現映射操作實例詳解》,本文關鍵詞  php,實現,映射,操作,實例,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《php實現映射操作實例詳解》相關的同類信息!
  • 本頁收集關于php實現映射操作實例詳解的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    久久激情综合网| 欧美日韩另类一区| 欧美一级片在线看| 亚洲综合色丁香婷婷六月图片| 51久久夜色精品国产麻豆| 国产精品白丝av| 国产精品久久国产精麻豆99网站| 美女视频一区在线观看| 久久你懂得1024| 欧美一级夜夜爽| 开心九九激情九九欧美日韩精美视频电影| 欧美三级资源在线| 另类综合日韩欧美亚洲| 欧美区一区二区三区| 日精品一区二区| 国产欧美日韩视频在线观看| 久久综合狠狠综合久久综合88| 日韩专区一卡二卡| 国产日韩v精品一区二区| 在线不卡免费av| 婷婷亚洲久悠悠色悠在线播放| 国产日韩精品视频一区| 久久久精品免费观看| 精品视频一区 二区 三区| 蜜桃91丨九色丨蝌蚪91桃色| 综合色天天鬼久久鬼色| 欧美日韩国产首页在线观看| 91在线视频在线| 国产一区免费电影| 日韩精品一卡二卡三卡四卡无卡 | 国产精品正在播放| 亚洲女同一区二区| 激情五月婷婷综合网| 水野朝阳av一区二区三区| 91精品国产综合久久久久久久久久 | 91久久精品午夜一区二区| 成人黄色在线网站| 一本色道久久加勒比精品| 99久久婷婷国产| 狠狠v欧美v日韩v亚洲ⅴ| 亚洲精品一区二区三区99| 欧美精品一区二区三区蜜臀| 国产乱码精品一区二区三区av | 亚洲一二三专区| 一区二区三区四区亚洲| 亚洲r级在线视频| 国产高清不卡二三区| 国产一区二区三区四| 99在线精品一区二区三区| 欧美日韩一区视频| 久久久亚洲欧洲日产国码αv| 精品国产91乱码一区二区三区| 日韩亚洲欧美成人一区| 国产欧美一区二区精品性| 亚洲丰满少妇videoshd| 日韩欧美三级在线| 国产三级一区二区| 亚洲小说欧美激情另类| www.欧美亚洲| 久久久精品免费免费| 亚洲精品乱码久久久久久 | 国产丝袜在线精品| 蜜臀av性久久久久蜜臀aⅴ四虎 | 日韩小视频在线观看专区| 国产精品美女久久久久久久| 精品一区二区免费看| 欧美一区二区在线视频| 久久草av在线| 在线播放国产精品二区一二区四区| 国产精品欧美久久久久无广告 | 日韩一级高清毛片| 亚洲成av人片在线观看| 丝袜美腿亚洲一区| 在线一区二区三区| 亚洲综合免费观看高清在线观看| 高清国产一区二区三区| 久久精子c满五个校花| 丁香五精品蜜臀久久久久99网站| 欧美一级免费观看| 狠狠色丁香婷婷综合| 91精品国产综合久久久久久久久久| 一区二区三区不卡视频在线观看| 3d动漫精品啪啪| 国产一区亚洲一区| 精品国产91洋老外米糕| 99久久综合精品| 国内精品久久久久影院色| 亚洲欧美日韩国产综合| 91精品国产91久久久久久最新毛片 | 日韩免费一区二区| aaa亚洲精品| 国产传媒久久文化传媒| 亚洲欧美国产毛片在线| 蜜臀a∨国产成人精品| 美女脱光内衣内裤视频久久影院| 91蝌蚪porny| 久久精品日韩一区二区三区| 午夜精品久久久久久久久久| 成人天堂资源www在线| 91精品免费观看| 亚洲国产成人在线| 国产中文字幕精品| 欧美久久久一区| 亚洲三级在线观看| 国产精品一二三在| 国产欧美一区在线| 日韩高清国产一区在线| 不卡的电影网站| 精品久久99ma| 午夜天堂影视香蕉久久| 99免费精品在线观看| 亚洲男人的天堂av| 成人自拍视频在线| 久久免费精品国产久精品久久久久| 亚洲电影你懂得| 99久久亚洲一区二区三区青草| 欧美精品一区二区三| 亚洲欧美色图小说| 亚洲18色成人| 午夜精品一区在线观看| 国产成人av一区| 国产成人精品1024| 男女男精品视频| 日韩成人免费在线| 91高清在线观看| 欧美日韩精品电影| 91精品国产丝袜白色高跟鞋| 久久久久久亚洲综合| 久久精品人人做人人爽人人| 欧美日韩一区视频| 91超碰这里只有精品国产| 色噜噜狠狠一区二区三区果冻| 偷拍自拍另类欧美| 成人a免费在线看| 国产精品国产精品国产专区不蜜 | 日韩一区二区三区电影 | 色婷婷亚洲婷婷| 中文字幕视频一区| 精品在线亚洲视频| 久久久www成人免费无遮挡大片 | 欧美一区二区在线看| 亚洲福中文字幕伊人影院| 欧美一区二区三区日韩| 日本不卡高清视频| 亚洲国产成人一区二区三区| 中文字幕一区日韩精品欧美| 欧美图区在线视频| 国产精品一区三区| 视频在线观看一区二区三区| 日韩一级黄色大片| 日本精品一级二级| 亚洲影视资源网| 色综合av在线| 亚洲视频 欧洲视频| 欧美在线啊v一区| 日韩有码一区二区三区| 成人精品国产一区二区4080| wwwwxxxxx欧美| 久久99国产精品免费网站| 欧美日韩国产综合一区二区 | 日本在线不卡一区| 国产成人在线色| 日韩免费电影网站| 国产精品超碰97尤物18| 国产精品午夜春色av| 国产激情一区二区三区四区| 中文字幕日本乱码精品影院| 日韩亚洲电影在线| 欧美日韩激情一区二区三区| 色哦色哦哦色天天综合| 91在线无精精品入口| 1024精品合集| 亚洲色图色小说| 国产精品久久二区二区| 欧美国产精品久久| 亚洲欧美视频在线观看视频| 一区二区三区在线播| 又紧又大又爽精品一区二区| 欧美国产成人精品| 亚洲乱码日产精品bd| 亚洲国产欧美另类丝袜| 极品少妇一区二区三区精品视频| 午夜精品爽啪视频| 亚洲第四色夜色| 激情av综合网| 欧美一区二区三区的| 在线视频亚洲一区| 欧美日韩一区国产| 国产亚洲va综合人人澡精品| 欧美乱妇15p| 夜夜嗨av一区二区三区网页| 久久成人免费网站| 色婷婷国产精品久久包臀| 国产精品久久久久久久久免费樱桃 | 亚洲已满18点击进入久久| 久久aⅴ国产欧美74aaa| 尤物视频一区二区| 亚洲午夜激情网站| 日本一区二区三区dvd视频在线| 亚洲国产毛片aaaaa无费看|