如何在php项目中实现一个映射操作

  介绍

今天就跟大家聊聊有关如何在php项目中实现一个映射操作,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

映射

映射,或者射影,在数学及相关的领域经常等同于函数。基于此,部分映射就相当于部分函数,而完全映射相当于完全函数。

映射(Map)是用于存取键值对的数据结构(键,值),一个键只能对应一个值且键不能重复。

实现

映射的实现方式可以使用链表或二叉树实现。

如何在php项目中实现一个映射操作

链表实现:

& lt; php ?/* *   ,*接口,字典   ,* Interface  Dict类型   ,* @package 应用\模型   ,*/Interface  Dict类型   {   public 才能;function 集(key 美元;,,value 美元;);   public  function 才能得到(,key 美元;);   public 才能;function  isExist (, key 美元;);   public 才能;function 删除(键);   public 才能;function  getSize ();   }   class  DictLinkList  implements  Dict类型   {   protected 才能;$大?0;   public 才能;美元关键;   public 才能;美元价值;   public 才能;下一美元;   public 才能;function  __construct(关键=null,美元价值=https://www.yisu.com/zixun/null,未来美元=null)   {   $ this ->键=$键;=$ $ this ->价值价值;   下=$ $ this -> next;   }   公共函数集(键,价值美元){   节点=美元;   而($ & & $ node ->下一个节点){   if ($ node -> next ->键==$键){   节点->下一步->值=美元价值;   返回$ node ->下一个;   }   $ node=$ node ->下一个;   }   下=$ node ->新自我(键,值,美元$ node ->下一个);   $ this ->大小+ +;   返回$ node ->下一个;   }   公共函数得到(键){   节点=美元;   虽然美元(节点){   如果美元($ node ->键==键){   返回$ node ->值;   }   $ node=$ node ->下一个;   }   抛出新的/异常(不能发现关键的);   }   公共函数isExist(键)   {   节点=美元;   虽然美元(节点){   如果美元($ node ->键==键){   返回true;   }   $ node=$ node ->下一个;   }   返回错误;   }   公共函数删除(键)   {   如果($ this ->大?=0)   抛出新的/异常(关键是不存在的);   节点=美元;   而($ node -> next) {   if ($ node -> next ->键==$键){   下=$ $ node ->节点->下一步->下一个;   $ this ->大小;   打破;   }   $ node=$ node ->下一个;   }   返回这个美元;   }   公共函数getSize ()   {   返回$ this ->大小;   }   }

测试:

& lt; php ?   ,,,dict 美元;=,new  DictLinkList ();   ,,,美元dict→设置(& # 39;太阳# 39;,111),,//O (n)   ,,,美元dict→设置(& # 39;太阳# 39;,222);   ,,,美元dict→设置(& # 39;w # 39;, 111);   ,,,美元dict→设置(& # 39;k # 39;, 111);   ,,,var_dump (dict→美元(& # 39;w # 39;));,,//O (n)   ,,,var_dump()美元dict→isExist (& # 39; v # 39;));,,//O (n)   ,,,var_dump(美元dict→删除(& # 39;太阳# 39;));,,//O (n)   ,,,var_dump()美元dict→getSize ());/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *///111//错误//正确的//2

二叉树实现

& lt; php ?   class  DictBtree  implements  Dict类型   {   public 才能;美元关键;   public 才能;美元价值;   public 才能;美元离开;   public 才能正确的美元;   private 才能;美元大小;   public 才能;function  __construct(关键=null,价值美元=https://www.yisu.com/zixun/null)   {   $ this ->键=$键;=$ $ this ->价值价值;   $ this ->左=零;   $ this ->右=零;   $ this ->大?0;   }   公共函数集(键,价值美元){   如果($ this ->大?=0){   $ node=new静态(键,美元价值);   $ this ->键=$ node ->键;=$ $ this ->值节点->价值;   $ this ->大小+ +;   其他}{   节点=美元;   虽然美元(节点){   如果美元($ node ->键==键){   节点->值=美元价值;   打破;   }   如果美元($ node ->键>键){   if ($ node ->左==null) {   $ node ->左=new静态(键,美元价值);   $ this ->大小+ +;   打破;   }   $ node=$ node ->左;   其他}{   如果($ node ->右==null) {   $ node ->右=new静态(键,美元价值);   $ this ->大小+ +;   打破;   }   $ node=$ node ->正确;   }   }   }   返回这个美元;   }   公共函数得到(键){   如果($ this ->大?=0)   抛出新的/异常(“空”);   节点=美元;   虽然美元(节点){   如果美元($ node ->键==键){   返回$ node ->值;   }   如果美元($ node ->键>键){   $ node=$ node ->左;   其他}{   $ node=$ node ->正确;   }   }   抛出新的/异常(这个密钥不存在的);   }   公共函数isExist(键){   如果($ this ->大?=0)   返回错误;   节点=美元;   虽然美元(节点){   如果美元($ node ->键==键){   返回true;   }   如果美元($ node ->键>键){   $ node=$ node ->左;   其他}{   $ node=$ node ->正确;   }   }   返回错误;   }   公共函数删除(键){//找到元素,寻找元素左边最小元素   (节点=$ this ->选择美元键);   if ($ node ->吧!=null) {   node1=节点-> selectMin美元($ node ->右);//替换当前节点   $ node ->键=$ node1 ->键;   节点->值=node1 ->美元价值;//删除$ node ->右最小元素,获取最终元素赋给$ node ->对   $ nodeMin=$ this -> deleteMin ($ node ->右);   $ node ->右=$ nodeMin;   其他}{   node1=节点-> selectMax美元($ node ->左);   $ node ->键=$ node1 ->键;   节点->值=node1 ->美元价值;   $ nodeMax=$ this -> deleteMax ($ node ->左);   节点->左=nodeMax美元;   }   返回这个美元;   }   保护功能deleteMin(节点){//如果($ this ->大?=0)//抛出新的/异常(“空”);//美元prev=新的静态();//上一页->左=美元节点;//当($上一页->左->左!=null) {////prev=美元上一页->左;//}//$上一页->左=$上一页->左->右;   if ($ node ->左==null) {   $ rightNode=$ node ->;   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

如何在php项目中实现一个映射操作