php 实现 单链表
来源:互联网 发布:量化分析软件 编辑:程序博客网 时间:2024/06/03 12:26
- <?php
- class LinkList
- {
- protected $linkList =array();
- protected $listLength=0;
- protected $listHeader=null;
- protected $existedCounts=0;
- public function __construct($arr='')
- {
- $arr!=null&&$this->createList($arr);
- }
- public function createList($arr)
- {
- if (!is_array($arr))
- return false;
- $length=count($arr);
- for($i=0;$i<$length;$i++)
- {
- if($i==$length-1)
- {
- //每个链表结点包括var和next两个索引,var表示结点值,next为下一个结点的索引
- //最后一个结点的next为null
- $list[$i]['var'] =$arr[$i];
- $list[$i]['next'] =null;
- }
- else
- {
- $list[$i]['var'] =$arr[$i];
- $list[$i]['next'] =$i+1;
- }
- }
- $this->linkList =$list;
- $this->listLength =$length;
- $this->existedCounts =$length;
- $this->listHeader=0;
- return true;
- }
- public function returnToArray()
- {
- $arr=array();
- $tmp=$this->linkList[$this->listHeader];
- for($i=0;$i<$this->listLength;$i++)
- {
- $arr[]=$tmp['var'];
- if ($i!=$this->listLength-1)
- {
- $tmp=$this->linkList[$tmp['next']];
- }
- }
- return $arr;
- }
- public function getLength()
- {
- return $this->listLength;
- }
- public function getDeletedNums()
- {
- $count=$this->existedCounts-$this->listLength;
- return $count;
- }
- public function getElemLocation($index)
- {
- if (!array_key_exists($index,$this->linkList))
- return false;
- $arrIndex=$this->listHeader;
- for($num=1;$tmp=$this->linkList[$arrIndex];$num++)
- {
- if ($index==$arrIndex)
- break;
- else
- {
- $arrIndex=$tmp['next'];
- }
- }
- return $num;
- }
- protected function &getElemRef($i)
- {
- //判断$i的类型以及是否越界
- $result=false;
- if (!is_numeric($i)||(int)$i<=0||(int)$i>$this->listLength)
- return $result;
- //由于单链表中的任何两个元素的存储位置之间没有固定关系,要取得第i个元素必须从
- //表头开始查找,因此单链表是非随机存储的存储结构。
- $j=0;
- $value=&$this->linkList[$this->listHeader];
- while ($j<$i-1)
- {
- $value=&$this->linkList[$value['next']];
- $j++;
- }
- return $value;
- }
- public function getElemvar($i)
- {
- $var=$this->getElemRef($i);
- if ($var!=false)
- {
- return $var['var'];
- }
- else return false;
- }
- public function insertIntoList($i,$var)
- {
- if (!is_numeric($i)||(int)$i<0||(int)$i>$this->listLength)
- return false;
- if ($i==0)
- {
- //如果$i-0,则在表最前面添加元素,新元素索引为$listLength,这样是确保不会
- //覆盖原来的元素,另外这种情况需要重新设置$listHeader
- $this->linkList[$this->existedCounts]['var'] =$var;
- $this->linkList[$this->existedCounts]['next']=$this->listHeader;
- $this->listHeader=$this->existedCounts;
- $this->listLength++;
- $this->existedCounts++;
- return true;
- }
- $value=&$this->getElemRef($i);
- $this->linkList[$this->existedCounts]['var'] =$var;
- $this->linkList[$this->existedCounts]['next']=($i==$this->listLength?null:$value['next']);
- $value['next']=$this->existedCounts;
- $this->listLength++;
- $this->existedCounts++;
- return true;
- }
- public function delFromList($i)
- {
- if (!is_numeric($i)||(int)$i<=0||(int)$i>$this->listLength)
- return false;
- if ($i==1)
- {
- //若删除的结点为头结点,则需要从新设置链表头
- $tmp=$this->linkList[$this->listHeader];
- unset($this->linkList[$this->listHeader]);
- $this->listHeader=$tmp['next'];
- $this->listLength--;
- return true;
- }
- else
- {
- $value =&$this->getElemRef($i);
- $prevValue=&$this->getElemRef($i-1);
- unset($this->linkList[$prevValue['next']]);
- $prevValue['next']=$value['next'];
- $this->listLength--;
- return true;
- }
- }
- public function listSort($sortType='true')
- {
- //从新修改关联关系可能会更复杂,所以我选择先还原成一维数组,然后对数组排序,然后再生成链表
- $arr=$this->returnToArray();
- $sortType?sort($arr):rsort($arr);
- $this->createList($arr);
- }
- }
- ?>
- php 实现 单链表
- PHP 实现单链表
- php实现单链表
- php实现单链表操作
- PHP实现单链表
- 用PHP实现的单链表
- 用PHP实现的单链表
- 线性单链表的实现(php)
- php实现单链表的实例代码
- php实现单链表的基本操作
- php httpRequest(php实现httpRequest)
- 【php】 AES算法php实现
- PHP Array -- PHP 实现堆栈 PHP Stack
- PHP Array -- PHP实现队列 -- PHP Queues
- PHP实现文件下载
- PHP MVC架构实现
- php中实现多线程
- PHP中实现多线程
- 5种方法解除开机密码
- Windows启动过程详解
- 视频剪切合并、及能对视频里的声音进行编辑
- 寒江独钓-Windows内核安全编程总结
- 关于Java之父离职原因的随想
- php 实现 单链表
- windbg符号表修复
- (转)详解Linux2.6内核中基于platform机制的驱动模型
- 谈谈最近的Oracle与Google之争
- 怀孕期间可以让孩子变漂亮的办法
- 几招百试不爽的软件防破解技巧,程序员必读
- XP安全设置
- 神勇程序员——北漂的实习生(程序员漫画日记)
- RMI-IIOP Programmer's Guide