PHP数组实现单链表的具体代码分享_PHP教程

php中文网
发布: 2016-07-15 13:29:40
原创
1231人浏览过

我们今天为大家带来的时候如何运用php数组实现单链表结构

此类主要是依靠php强大的数组系统来模拟出单链表类型的数据结构。 本人完全凭借自己的 兴趣来编写此类,并未考虑其实用性,主要是给大家理解一些简单的数据结构知识,同时也训练 一下php中的数组运用能力。

单链表简介:

单链表是最简单的链表表示。用它来表示线性表时,每一个数据元素占用一个结点(node)。一个 结点一般由两个域组成,一个域存放数据元素data; 另一个域存放一个指向链表中下一个结点的指针link,它指出下一个结点 的开始存储地址。而最后一个结点的指针为空。单链表中数据元素之间的逻 辑关系是由结点中的指针指示的,换句话说,指针为数据元素之间的逻辑关系的映象,则逻辑上相邻的两个元素其存储的物理位置不要求紧邻,因此, 这种存储结构为非顺序映像或链式映像。当然,在php没有指针这个概念,但是我们可以用关联数组来模拟。

表单大师AI
表单大师AI

一款基于自然语言处理技术的智能在线表单创建工具,可以帮助用户快速、高效地生成各类专业表单。

表单大师AI 74
查看详情 表单大师AI

PHP数组实现单链表的代码如下:

<OL class=dp-xml><LI class=alt><SPAN><STRONG><FONT color=#006699><SPAN class=tag><?</SPAN><SPAN class=tag-name>php</SPAN></FONT></STRONG><SPAN> </SPAN></SPAN><LI class=""><SPAN>class LinkList   </SPAN><LI class=alt><SPAN>{  </SPAN><LI class=""><SPAN>   /**  </SPAN><LI class=alt><SPAN>    * 成员变量  </SPAN><LI class=""><SPAN>    * @var array    $linkList       链表数组  </SPAN><LI class=alt><SPAN>    * @var number   $listHeader     表头索引  </SPAN><LI class=""><SPAN>    * @var number   $listLength     链表长度  </SPAN><LI class=alt><SPAN>    * @var number   $existedCounts  记录链表中出现过的元素的个数,和$listLength不同的是, 删除一  </SPAN><LI class=""><SPAN>    *                               个元素之后,该值不需要减1,这个也可以用来为新元素分配索引。                            </SPAN><LI class=alt><SPAN>    */  </SPAN><LI class=""><SPAN>   protected  $</SPAN><SPAN class=attribute><FONT color=#ff0000>linkList</FONT></SPAN><SPAN>  =</SPAN><SPAN class=attribute-value><FONT color=#0000ff>array</FONT></SPAN><SPAN>();  </SPAN></SPAN><LI class=alt><SPAN>   protected  $</SPAN><SPAN class=attribute><FONT color=#ff0000>listLength</FONT></SPAN><SPAN>=</SPAN><SPAN class=attribute-value><FONT color=#0000ff>0</FONT></SPAN><SPAN>;  </SPAN></SPAN><LI class=""><SPAN>   protected  $</SPAN><SPAN class=attribute><FONT color=#ff0000>listHeader</FONT></SPAN><SPAN>=</SPAN><SPAN class=attribute-value><FONT color=#0000ff>null</FONT></SPAN><SPAN>;  </SPAN></SPAN><LI class=alt><SPAN>   protected  $</SPAN><SPAN class=attribute><FONT color=#ff0000>existedCounts</FONT></SPAN><SPAN>=</SPAN><SPAN class=attribute-value><FONT color=#0000ff>0</FONT></SPAN><SPAN>;  </SPAN></SPAN><LI class=""><SPAN>   /**  </SPAN><LI class=alt><SPAN>    * 构造函数  </SPAN><LI class=""><SPAN>    *   构造函数可以带一个数组参数,如果有参数,则调用成员方法  </SPAN><LI class=alt><SPAN>    * createList将数组转换成链表,并算出链表长度.如果没有参  </SPAN><LI class=""><SPAN>    * 数,则生成一空链表.空链表可以通过调用成员方法createList  </SPAN><LI class=alt><SPAN>    * 生成链表.  </SPAN><LI class=""><SPAN>    * @access public  </SPAN><LI class=alt><SPAN>    * @param  array $arr 需要被转化为链表的数组  </SPAN><LI class=""><SPAN>    */  </SPAN><LI class=alt><SPAN>   public function __construct($</SPAN><SPAN class=attribute><FONT color=#ff0000>arr</FONT></SPAN><SPAN>=</SPAN><SPAN class=attribute-value><FONT color=#0000ff>''</FONT></SPAN><SPAN>)  </SPAN></SPAN><LI class=""><SPAN>   {  </SPAN><LI class=alt><SPAN>     $arr!=null&&$this-</SPAN><SPAN class=tag><STRONG><FONT color=#006699>></FONT></STRONG></SPAN><SPAN>createList($arr);  </SPAN></SPAN><LI class=""><SPAN>   }  </SPAN><LI class=alt><SPAN>   /**  </SPAN><LI class=""><SPAN>    * 生成链表的函数  </SPAN><LI class=alt><SPAN>    *   将数组转变成链表,同时计算出链表长度。分别赋值给成员标量  </SPAN><LI class=""><SPAN>    * $linkList和$listLength.  </SPAN><LI class=alt><SPAN>    * @access public  </SPAN><LI class=""><SPAN>    * @param  array $arr 需要被转化为链表的数组  </SPAN><LI class=alt><SPAN>    * @return boolean  true表示转换成功,false表示失败    </SPAN><LI class=""><SPAN>    */  </SPAN><LI class=alt><SPAN>  public function createList($arr)  </SPAN><LI class=""><SPAN>  {   </SPAN><LI class=alt><SPAN>   if (!is_array($arr))   </SPAN><LI class=""><SPAN>    return false;  </SPAN><LI class=alt><SPAN>   $</SPAN><SPAN class=attribute><FONT color=#ff0000>length</FONT></SPAN><SPAN>=</SPAN><SPAN class=attribute-value><FONT color=#0000ff>count</FONT></SPAN><SPAN>($arr);  </SPAN></SPAN><LI class=""><SPAN>   for($</SPAN><SPAN class=attribute><FONT color=#ff0000>i</FONT></SPAN><SPAN>=</SPAN><SPAN class=attribute-value><FONT color=#0000ff>0</FONT></SPAN><SPAN>;$i</SPAN><SPAN class=tag><STRONG><FONT color=#006699><</FONT></STRONG></SPAN><SPAN>$length;$i++)  </SPAN></SPAN><LI class=alt><SPAN>   {     </SPAN><LI class=""><SPAN>       if($</SPAN><SPAN class=attribute><FONT color=#ff0000>i</FONT></SPAN><SPAN>==$length-1)  </SPAN></SPAN><LI class=alt><SPAN>       {  </SPAN><LI class=""><SPAN>        //每个链表结点包括var和next两个索引,var表示结点值,next为下一个结点的索引  </SPAN><LI class=alt><SPAN>        //最后一个结点的next为null  </SPAN><LI class=""><SPAN>        $list[$i]['var']  =$arr[$i];  </SPAN><LI class=alt><SPAN>        $list[$i]['next'] =null;  </SPAN><LI class=""><SPAN>       }  </SPAN><LI class=alt><SPAN>       else   </SPAN><LI class=""><SPAN>       {  </SPAN><LI class=alt><SPAN>        $list[$i]['var']  =$arr[$i];  </SPAN><LI class=""><SPAN>        $list[$i]['next'] =$i+1;  </SPAN><LI class=alt><SPAN>       }  </SPAN><LI class=""><SPAN>   }  </SPAN><LI class=alt><SPAN>   $this-</SPAN><SPAN class=tag><STRONG><FONT color=#006699>></FONT></STRONG></SPAN><SPAN class=attribute><FONT color=#ff0000>linkList</FONT></SPAN><SPAN>      =$list;  </SPAN></SPAN><LI class=""><SPAN>   $this-</SPAN><SPAN class=tag><STRONG><FONT color=#006699>></FONT></STRONG></SPAN><SPAN class=attribute><FONT color=#ff0000>listLength</FONT></SPAN><SPAN>    =$length;  </SPAN></SPAN><LI class=alt><SPAN>   $this-</SPAN><SPAN class=tag><STRONG><FONT color=#006699>></FONT></STRONG></SPAN><SPAN class=attribute><FONT color=#ff0000>existedCounts</FONT></SPAN><SPAN> =$length;  </SPAN></SPAN><LI class=""><SPAN>   $this-</SPAN><SPAN class=tag><STRONG><FONT color=#006699>></FONT></STRONG></SPAN><SPAN class=attribute><FONT color=#ff0000>listHeader</FONT></SPAN><SPAN>=</SPAN><SPAN class=attribute-value><FONT color=#0000ff>0</FONT></SPAN><SPAN>;  </SPAN></SPAN><LI class=alt><SPAN>   return true;  </SPAN><LI class=""><SPAN>  }  </SPAN><LI class=alt><SPAN>  /**  </SPAN><LI class=""><SPAN>   * 将链表还原成一维数组  </SPAN><LI class=alt><SPAN>   * @access public  </SPAN><LI class=""><SPAN>   * @return array    $arr  生成的一维数组  </SPAN><LI class=alt><SPAN>   */  </SPAN><LI class=""><SPAN>  public function returnToArray()  </SPAN><LI class=alt><SPAN>  {   </SPAN><LI class=""><SPAN>   $</SPAN><SPAN class=attribute><FONT color=#ff0000>arr</FONT></SPAN><SPAN>=</SPAN><SPAN class=attribute-value><FONT color=#0000ff>array</FONT></SPAN><SPAN>();  </SPAN></SPAN><LI class=alt><SPAN>   $</SPAN><SPAN class=attribute><FONT color=#ff0000>tmp</FONT></SPAN><SPAN>=$this-</SPAN><SPAN class=tag><STRONG><FONT color=#006699>></FONT></STRONG></SPAN><SPAN>linkList[$this-</SPAN><SPAN class=tag><STRONG><FONT color=#006699>></FONT></STRONG></SPAN><SPAN>listHeader];  </SPAN></SPAN><LI class=""><SPAN>    for($</SPAN><SPAN class=attribute><FONT color=#ff0000>i</FONT></SPAN><SPAN>=</SPAN><SPAN class=attribute-value><FONT color=#0000ff>0</FONT></SPAN><SPAN>;$i</SPAN><SPAN class=tag><STRONG><FONT color=#006699><</FONT></STRONG></SPAN><SPAN>$this-</SPAN><SPAN class=tag><STRONG><FONT color=#006699>></FONT></STRONG></SPAN><SPAN>listLength;$i++)  </SPAN></SPAN><LI class=alt><SPAN>   {  </SPAN><LI class=""><SPAN>     $arr[]=$tmp['var'];  </SPAN><LI class=alt><SPAN>     if ($i!=$this-</SPAN><SPAN class=tag><STRONG><FONT color=#006699>></FONT></STRONG></SPAN><SPAN>listLength-1)   </SPAN></SPAN><LI class=""><SPAN>     {  </SPAN><LI class=alt><SPAN>     $</SPAN><SPAN class=attribute><FONT color=#ff0000>tmp</FONT></SPAN><SPAN>=$this-</SPAN><SPAN class=tag><STRONG><FONT color=#006699>></FONT></STRONG></SPAN><SPAN>linkList[$tmp['next']];  </SPAN></SPAN><LI class=""><SPAN>     }  </SPAN><LI class=alt><SPAN>   }  </SPAN><LI class=""><SPAN>   return $arr;  </SPAN><LI class=alt><SPAN>  }  </SPAN><LI class=""><SPAN>public function getLength()  </SPAN><LI class=alt><SPAN>  {  </SPAN><LI class=""><SPAN>          return $this-</SPAN><SPAN class=tag><STRONG><FONT color=#006699>></FONT></STRONG></SPAN><SPAN>listLength;  </SPAN></SPAN><LI class=alt><SPAN>  }  </SPAN><LI class=""><SPAN>  /**  </SPAN><LI class=alt><SPAN>   * 计算一共删除过多少个元素  </SPAN><LI class=""><SPAN>   * @access public   </SPAN><LI class=alt><SPAN>   * @return number $count 到目前为止删除过的元素个数  </SPAN><LI class=""><SPAN>   */  </SPAN><LI class=alt><SPAN>  public function getDeletedNums()  </SPAN><LI class=""><SPAN>  {  </SPAN><LI class=alt><SPAN>          $</SPAN><SPAN class=attribute><FONT color=#ff0000>count</FONT></SPAN><SPAN>=$this-</SPAN><SPAN class=tag><STRONG><FONT color=#006699>></FONT></STRONG></SPAN><SPAN>existedCounts-$this-</SPAN><SPAN class=tag><STRONG><FONT color=#006699>></FONT></STRONG></SPAN><SPAN>listLength;  </SPAN></SPAN><LI class=""><SPAN>          return $count;  </SPAN><LI class=alt><SPAN>  }  </SPAN><LI class=""><SPAN>  /**  </SPAN><LI class=alt><SPAN>   * 通过元素索引返回元素序号  </SPAN><LI class=""><SPAN>   * @access protected  </SPAN><LI class=alt><SPAN>   * @param  $index     元素的索引号  </SPAN><LI class=""><SPAN>   * @return $num       元素在链表中的序号  </SPAN><LI class=alt><SPAN>   */  </SPAN><LI class=""><SPAN>  public function getElemLocation($index)  </SPAN><LI class=alt><SPAN>  {  </SPAN><LI class=""><SPAN>  if (!array_key_exists($index,$this-</SPAN><SPAN class=tag><STRONG><FONT color=#006699>></FONT></STRONG></SPAN><SPAN>linkList))   </SPAN></SPAN><LI class=alt><SPAN>   return false;  </SPAN><LI class=""><SPAN>    $</SPAN><SPAN class=attribute><FONT color=#ff0000>arrIndex</FONT></SPAN><SPAN>=$this-</SPAN><SPAN class=tag><STRONG><FONT color=#006699>></FONT></STRONG></SPAN><SPAN>listHeader;  </SPAN></SPAN><LI class=alt><SPAN>    for($</SPAN><SPAN class=attribute><FONT color=#ff0000>num</FONT></SPAN><SPAN>=</SPAN><SPAN class=attribute-value><FONT color=#0000ff>1</FONT></SPAN><SPAN>;$</SPAN><SPAN class=attribute><FONT color=#ff0000>tmp</FONT></SPAN><SPAN>=$this-</SPAN><SPAN class=tag><STRONG><FONT color=#006699>></FONT></STRONG></SPAN><SPAN>linkList[$arrIndex];$num++)  </SPAN></SPAN><LI class=""><SPAN>    {  </SPAN><LI class=alt><SPAN>            if ($</SPAN><SPAN class=attribute><FONT color=#ff0000>index</FONT></SPAN><SPAN>==$arrIndex)   </SPAN></SPAN><LI class=""><SPAN>            break;  </SPAN><LI class=alt><SPAN>            else   </SPAN><LI class=""><SPAN>            {  </SPAN><LI class=alt><SPAN>                    $</SPAN><SPAN class=attribute><FONT color=#ff0000>arrIndex</FONT></SPAN><SPAN>=$tmp['next'];  </SPAN></SPAN><LI class=""><SPAN>            }  </SPAN><LI class=alt><SPAN>    }  </SPAN><LI class=""><SPAN>    return $num;  </SPAN><LI class=alt><SPAN>  }  </SPAN><LI class=""><SPAN>  /**  </SPAN><LI class=alt><SPAN>   * 获取第$i个元素的引用  </SPAN><LI class=""><SPAN>   *   这个保护方法不能被外界直接访问,许多服务方法以来与次方法。  </SPAN><LI class=alt><SPAN>   * 它用来返回链表中第$i个元素的引用,是一个数组  </SPAN><LI class=""><SPAN>   * @access protected  </SPAN><LI class=alt><SPAN>   * @param  number $i 元素的序号  </SPAN><LI class=""><SPAN>   * @return reference 元素的引用  </SPAN><LI class=alt><SPAN>   */  </SPAN><LI class=""><SPAN>  protected function &getElemRef($i)  </SPAN><LI class=alt><SPAN>  {  </SPAN><LI class=""><SPAN>          //判断$i的类型以及是否越界  </SPAN><LI class=alt><SPAN>          $</SPAN><SPAN class=attribute><FONT color=#ff0000>result</FONT></SPAN><SPAN>=</SPAN><SPAN class=attribute-value><FONT color=#0000ff>false</FONT></SPAN><SPAN>;  </SPAN></SPAN><LI class=""><SPAN>          if (!is_numeric($i)||(int)$i</SPAN><SPAN class=tag><STRONG><FONT color=#006699><</FONT></STRONG></SPAN><SPAN>=0||(int)$i</SPAN><SPAN class=tag><STRONG><FONT color=#006699>></FONT></STRONG></SPAN><SPAN>$this-</SPAN><SPAN class=tag><STRONG><FONT color=#006699>></FONT></STRONG></SPAN><SPAN>listLength)   </SPAN></SPAN><LI class=alt><SPAN>          return $result;  </SPAN><LI class=""><SPAN>   //由于单链表中的任何两个元素的存储位置之间没有固定关系,要取得第i个元素必须从  </SPAN><LI class=alt><SPAN>   //表头开始查找,因此单链表是非随机存储的存储结构。  </SPAN><LI class=""><SPAN>   $</SPAN><SPAN class=attribute><FONT color=#ff0000>j</FONT></SPAN><SPAN>=</SPAN><SPAN class=attribute-value><FONT color=#0000ff>0</FONT></SPAN><SPAN>;  </SPAN></SPAN><LI class=alt><SPAN>   $</SPAN><SPAN class=attribute><FONT color=#ff0000>value</FONT></SPAN><SPAN>=&$this-</SPAN><SPAN class=tag><STRONG><FONT color=#006699>></FONT></STRONG></SPAN><SPAN>linkList[$this-</SPAN><SPAN class=tag><STRONG><FONT color=#006699>></FONT></STRONG></SPAN><SPAN>listHeader];  </SPAN></SPAN><LI class=""><SPAN>   while ($j</SPAN><SPAN class=tag><STRONG><FONT color=#006699><</FONT></STRONG></SPAN><SPAN>$i-1)  </SPAN></SPAN><LI class=alt><SPAN>   {  </SPAN><LI class=""><SPAN>           $</SPAN><SPAN class=attribute><FONT color=#ff0000>value</FONT></SPAN><SPAN>=&$this-</SPAN><SPAN class=tag><STRONG><FONT color=#006699>></FONT></STRONG></SPAN><SPAN>linkList[$value['next']];  </SPAN></SPAN><LI class=alt><SPAN>           $j++;  </SPAN><LI class=""><SPAN>   }  </SPAN><LI class=alt><SPAN>   return $value;  </SPAN><LI class=""><SPAN>  }  </SPAN><LI class=alt><SPAN>  /**  </SPAN><LI class=""><SPAN>   * 返回第i个元素的值  </SPAN><LI class=alt><SPAN>   * @access public  </SPAN><LI class=""><SPAN>   * @param  number $i     需要返回的元素的序号,从1开始  </SPAN><LI class=alt><SPAN>   * @return mixed  第i个元素的值  </SPAN><LI class=""><SPAN>   */  </SPAN><LI class=alt><SPAN>  public function getElemvar($i)  </SPAN><LI class=""><SPAN>  {  </SPAN><LI class=alt><SPAN>    $</SPAN><SPAN class=attribute><FONT color=#ff0000>var</FONT></SPAN><SPAN>=$this-</SPAN><SPAN class=tag><STRONG><FONT color=#006699>></FONT></STRONG></SPAN><SPAN>getElemRef($i);  </SPAN></SPAN><LI class=""><SPAN>    if ($var!=false)   </SPAN><LI class=alt><SPAN>    {  </SPAN><LI class=""><SPAN>            return $var['var'];  </SPAN><LI class=alt><SPAN>    }  </SPAN><LI class=""><SPAN>    else return false;  </SPAN><LI class=alt><SPAN>  }  </SPAN><LI class=""><SPAN>  /**  </SPAN><LI class=alt><SPAN>   *   在第i个元素之后插入一个值为var的新元素  </SPAN><LI class=""><SPAN>   *   i的取值应该为[1,$this-</SPAN><SPAN class=tag><STRONG><FONT color=#006699>></FONT></STRONG></SPAN><SPAN>listLength],如果</SPAN><SPAN class=attribute><FONT color=#ff0000>i</FONT></SPAN><SPAN>=</SPAN><SPAN class=attribute-value><FONT color=#0000ff>0</FONT></SPAN><SPAN>,表示在表的最前段插入,  </SPAN></SPAN><LI class=alt><SPAN>   * 如果</SPAN><SPAN class=attribute><FONT color=#ff0000>i</FONT></SPAN><SPAN>=$this-</SPAN><SPAN class=tag><STRONG><FONT color=#006699>></FONT></STRONG></SPAN><SPAN>listLength,表示在表的末尾插入,插入的方法为,将第$i-1个元素  </SPAN></SPAN><LI class=""><SPAN>   * 的next指向第$i个元素,然后将第$i个元素的next指向第$i+1个元素,这样就实现了插入  </SPAN><LI class=alt><SPAN>   * @access public  </SPAN><LI class=""><SPAN>   * @param  number $i   在位置i插入新元素  </SPAN><LI class=alt><SPAN>   * @param  mixed  $var 要插入的元素的值   </SPAN><LI class=""><SPAN>   * @return boolean  成功则返回true,否则返回false  </SPAN><LI class=alt><SPAN>   */  </SPAN><LI class=""><SPAN>  public function insertIntoList($i,$var)  </SPAN><LI class=alt><SPAN>  {  </SPAN><LI class=""><SPAN>          if (!is_numeric($i)||(int)$i</SPAN><STRONG><FONT color=#006699><SPAN class=tag><</SPAN><SPAN class=tag-name>0</SPAN></FONT></STRONG><SPAN>||(int)$i</SPAN><SPAN class=tag><STRONG><FONT color=#006699>></FONT></STRONG></SPAN><SPAN>$this-</SPAN><SPAN class=tag><STRONG><FONT color=#006699>></FONT></STRONG></SPAN><SPAN>listLength)   </SPAN></SPAN><LI class=alt><SPAN>          return false;  </SPAN><LI class=""><SPAN>          if ($</SPAN><SPAN class=attribute><FONT color=#ff0000>i</FONT></SPAN><SPAN>==0)   </SPAN></SPAN><LI class=alt><SPAN>          {  </SPAN><LI class=""><SPAN>          //如果$i-0,则在表最前面添加元素,新元素索引为$listLength,这样是确保不会  </SPAN><LI class=alt><SPAN>          //覆盖原来的元素,另外这种情况需要重新设置$listHeader  </SPAN><LI class=""><SPAN>              $this-</SPAN><SPAN class=tag><STRONG><FONT color=#006699>></FONT></STRONG></SPAN><SPAN>linkList[$this-</SPAN><SPAN class=tag><STRONG><FONT color=#006699>></FONT></STRONG></SPAN><SPAN>existedCounts]['var'] =$var;  </SPAN></SPAN><LI class=alt><SPAN>              $this-</SPAN><SPAN class=tag><STRONG><FONT color=#006699>></FONT></STRONG></SPAN><SPAN>linkList[$this-</SPAN><SPAN class=tag><STRONG><FONT color=#006699>></FONT></STRONG></SPAN><SPAN>existedCounts]['next']=$this-</SPAN><SPAN class=tag><STRONG><FONT color=#006699>></FONT></STRONG></SPAN><SPAN>listHeader;  </SPAN></SPAN><LI class=""><SPAN>              $this-</SPAN><SPAN class=tag><STRONG><FONT color=#006699>></FONT></STRONG></SPAN><SPAN class=attribute><FONT color=#ff0000>listHeader</FONT></SPAN><SPAN>=$this-</SPAN><SPAN class=tag><STRONG><FONT color=#006699>></FONT></STRONG></SPAN><SPAN>existedCounts;  </SPAN></SPAN><LI class=alt><SPAN>              $this-</SPAN><SPAN class=tag><STRONG><FONT color=#006699>></FONT></STRONG></SPAN><SPAN>listLength++;  </SPAN></SPAN><LI class=""><SPAN>              $this-</SPAN><SPAN class=tag><STRONG><FONT color=#006699>></FONT></STRONG></SPAN><SPAN>existedCounts++;  </SPAN></SPAN><LI class=alt><SPAN>              return true;          </SPAN><LI class=""><SPAN>          }  </SPAN><LI class=alt><SPAN>   $</SPAN><SPAN class=attribute><FONT color=#ff0000>value</FONT></SPAN><SPAN>=&$this-</SPAN><SPAN class=tag><STRONG><FONT color=#006699>></FONT></STRONG></SPAN><SPAN>getElemRef($i);  </SPAN></SPAN><LI class=""><SPAN>   $this-</SPAN><SPAN class=tag><STRONG><FONT color=#006699>></FONT></STRONG></SPAN><SPAN>linkList[$this-</SPAN><SPAN class=tag><STRONG><FONT color=#006699>></FONT></STRONG></SPAN><SPAN>existedCounts]['var'] =$var;  </SPAN></SPAN><LI class=alt><SPAN>   $this-</SPAN><SPAN class=tag><STRONG><FONT color=#006699>></FONT></STRONG></SPAN><SPAN>linkList[$this-</SPAN><SPAN class=tag><STRONG><FONT color=#006699>></FONT></STRONG></SPAN><SPAN>existedCounts]['next']=($</SPAN><SPAN class=attribute><FONT color=#ff0000>i</FONT></SPAN><SPAN>==$this-</SPAN><SPAN class=tag><STRONG><FONT color=#006699>></FONT></STRONG></SPAN><SPAN>listLength?null:$value['next']);  </SPAN></SPAN><LI class=""><SPAN>   $value['next']=$this-</SPAN><SPAN class=tag><STRONG><FONT color=#006699>></FONT></STRONG></SPAN><SPAN>existedCounts;  </SPAN></SPAN><LI class=alt><SPAN>   $this-</SPAN><SPAN class=tag><STRONG><FONT color=#006699>></FONT></STRONG></SPAN><SPAN>listLength++;  </SPAN></SPAN><LI class=""><SPAN>   $this-</SPAN><SPAN class=tag><STRONG><FONT color=#006699>></FONT></STRONG></SPAN><SPAN>existedCounts++;  </SPAN></SPAN><LI class=alt><SPAN>   return true;  </SPAN><LI class=""><SPAN>  }  </SPAN><LI class=alt><SPAN>  /**  </SPAN><LI class=""><SPAN>   * 删除第$i个元素  </SPAN><LI class=alt><SPAN>   *   删除第$i个元素,该元素为取值应该为[1,$this-</SPAN><SPAN class=tag><STRONG><FONT color=#006699>></FONT></STRONG></SPAN><SPAN>listLength],需要注意,删除元素之后,  </SPAN></SPAN><LI class=""><SPAN>   * $this-</SPAN><SPAN class=tag><STRONG><FONT color=#006699>></FONT></STRONG></SPAN><SPAN>listLength减1,而$this-</SPAN><SPAN class=tag><STRONG><FONT color=#006699>></FONT></STRONG></SPAN><SPAN>existedCounts不变。删除的方法为将第$i-1个元素的  </SPAN></SPAN><LI class=alt><SPAN>   * next指向第$i+1个元素,那么第$i个元素就从链表中删除了。  </SPAN><LI class=""><SPAN>   * @access public  </SPAN><LI class=alt><SPAN>   * @param  number $i 将要被删除的元素的序号  </SPAN><LI class=""><SPAN>   * @return boolean    成功则返回true,否则返回false  </SPAN><LI class=alt><SPAN>   */  </SPAN><LI class=""><SPAN>  public function delFromList($i)  </SPAN><LI class=alt><SPAN>  {  </SPAN><LI class=""><SPAN>          if (!is_numeric($i)||(int)$i</SPAN><SPAN class=tag><STRONG><FONT color=#006699><</FONT></STRONG></SPAN><SPAN>=0||(int)$i</SPAN><SPAN class=tag><STRONG><FONT color=#006699>></FONT></STRONG></SPAN><SPAN>$this-</SPAN><SPAN class=tag><STRONG><FONT color=#006699>></FONT></STRONG></SPAN><SPAN>listLength)   </SPAN></SPAN><LI class=alt><SPAN>          return false;  </SPAN><LI class=""><SPAN>    if ($</SPAN><SPAN class=attribute><FONT color=#ff0000>i</FONT></SPAN><SPAN>==1)   </SPAN></SPAN><LI class=alt><SPAN>    {  </SPAN><LI class=""><SPAN>    //若删除的结点为头结点,则需要从新设置链表头  </SPAN><LI class=alt><SPAN>      $</SPAN><SPAN class=attribute><FONT color=#ff0000>tmp</FONT></SPAN><SPAN>=$this-</SPAN><SPAN class=tag><STRONG><FONT color=#006699>></FONT></STRONG></SPAN><SPAN>linkList[$this-</SPAN><SPAN class=tag><STRONG><FONT color=#006699>></FONT></STRONG></SPAN><SPAN>listHeader];  </SPAN></SPAN><LI class=""><SPAN>      unset($this-</SPAN><SPAN class=tag><STRONG><FONT color=#006699>></FONT></STRONG></SPAN><SPAN>linkList[$this-</SPAN><SPAN class=tag><STRONG><FONT color=#006699>></FONT></STRONG></SPAN><SPAN>listHeader]);  </SPAN></SPAN><LI class=alt><SPAN>      $this-</SPAN><SPAN class=tag><STRONG><FONT color=#006699>></FONT></STRONG></SPAN><SPAN class=attribute><FONT color=#ff0000>listHeader</FONT></SPAN><SPAN>=$tmp['next'];  </SPAN></SPAN><LI class=""><SPAN>      $this-</SPAN><SPAN class=tag><STRONG><FONT color=#006699>></FONT></STRONG></SPAN><SPAN>listLength--;  </SPAN></SPAN><LI class=alt><SPAN>      return true;  </SPAN><LI class=""><SPAN>    }  </SPAN><LI class=alt><SPAN>    else   </SPAN><LI class=""><SPAN>    {  </SPAN><LI class=alt><SPAN>     $</SPAN><SPAN class=attribute><FONT color=#ff0000>value</FONT></SPAN><SPAN>    =&$this-</SPAN><SPAN class=tag><STRONG><FONT color=#006699>></FONT></STRONG></SPAN><SPAN>getElemRef($i);  </SPAN></SPAN><LI class=""><SPAN>     $</SPAN><SPAN class=attribute><FONT color=#ff0000>prevValue</FONT></SPAN><SPAN>=&$this-</SPAN><SPAN class=tag><STRONG><FONT color=#006699>></FONT></STRONG></SPAN><SPAN>getElemRef($i-1);  </SPAN></SPAN><LI class=alt><SPAN>     unset($this-</SPAN><SPAN class=tag><STRONG><FONT color=#006699>></FONT></STRONG></SPAN><SPAN>linkList[$prevValue['next']]);  </SPAN></SPAN><LI class=""><SPAN>     $prevValue['next']=$value['next'];  </SPAN><LI class=alt><SPAN>     $this-</SPAN><SPAN class=tag><STRONG><FONT color=#006699>></FONT></STRONG></SPAN><SPAN>listLength--;  </SPAN></SPAN><LI class=""><SPAN>     return true;  </SPAN><LI class=alt><SPAN>    }  </SPAN><LI class=""><SPAN>  }  </SPAN><LI class=alt><SPAN>/**  </SPAN><LI class=""><SPAN>  * 对链表的元素排序  </SPAN><LI class=alt><SPAN>  *  谨慎使用此函数,排序后链表将被从新初始化,原有的成员变量将会被覆盖  </SPAN><LI class=""><SPAN>  * @accse public  </SPAN><LI class=alt><SPAN>  * @param  boolean  $</SPAN><SPAN class=attribute><FONT color=#ff0000>sortType</FONT></SPAN><SPAN>=</SPAN><SPAN class=attribute-value><FONT color=#0000ff>'true'</FONT></SPAN><SPAN> 排序方式,true表示升序,false表示降序,默认true     </SPAN></SPAN><LI class=""><SPAN>  */  </SPAN><LI class=alt><SPAN>public function listSort($</SPAN><SPAN class=attribute><FONT color=#ff0000>sortType</FONT></SPAN><SPAN>=</SPAN><SPAN class=attribute-value><FONT color=#0000ff>'true'</FONT></SPAN><SPAN>)  </SPAN></SPAN><LI class=""><SPAN>{  </SPAN><LI class=alt><SPAN>   //从新修改关联关系可能会更复杂,所以我选择先还原成一维数组,然后对数组排序,然后再生成链表  </SPAN><LI class=""><SPAN>   $</SPAN><SPAN class=attribute><FONT color=#ff0000>arr</FONT></SPAN><SPAN>=$this-</SPAN><SPAN class=tag><STRONG><FONT color=#006699>></FONT></STRONG></SPAN><SPAN>returnToArray();  </SPAN></SPAN><LI class=alt><SPAN>   $sortType?sort($arr):rsort($arr);  </SPAN><LI class=""><SPAN>   $this-</SPAN><SPAN class=tag><STRONG><FONT color=#006699>></FONT></STRONG></SPAN><SPAN>createList($arr);  </SPAN></SPAN><LI class=alt><SPAN>}  </SPAN><LI class=""><SPAN>}  </SPAN><LI class=alt><SPAN></SPAN><SPAN class=tag><STRONG><FONT color=#006699>?></FONT></STRONG></SPAN><SPAN> </SPAN></SPAN></LI></OL>
登录后复制

上面这段代码就是PHP数组实现单链表的源码编写,希望对大家有所帮助。


www.bkjia.comtruehttp://www.bkjia.com/PHPjc/446361.htmlTechArticle我们今天为大家带来的时候如何运用 PHP数组实现单链表结构 此类主要是依靠PHP强大的数组系统来模拟出单链表类型的数据结构。 本人完全...
相关标签:
php
PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号