PHP 双链表(SplDoublyLinkedList)简介和使用实例


Posted in PHP onMay 12, 2015

双链表是一种重要的线性存储结构,对于双链表中的每个节点,不仅仅存储自己的信息,还要保存前驱和后继节点的地址。

PHP 双链表(SplDoublyLinkedList)简介和使用实例

PHP SPL中的SplDoublyLinkedList类提供了对双链表的操作。
SplDoublyLinkedList类摘要如下:

SplDoublyLinkedList implements Iterator  , ArrayAccess  , Countable  {
 
  public __construct ( void )
  public void add ( mixed $index , mixed $newval )
  //双链表的头部节点
  public mixed top ( void )
  //双链表的尾部节点
  public mixed bottom ( void )
  //双联表元素的个数
  public int count ( void )
  //检测双链表是否为空
  public bool isEmpty ( void )
 
 
  //当前节点索引
  public mixed key ( void )
  //移到上条记录
  public void prev ( void )
  //移到下条记录
  public void next ( void )
  //当前记录
  public mixed current ( void )
  //将指针指向迭代开始处
  public void rewind ( void )
  //检查双链表是否还有节点
  public bool valid ( void )
 
  //指定index处节点是否存在
  public bool offsetExists ( mixed $index )
  //获取指定index处节点值
  public mixed offsetGet ( mixed $index )
  //设置指定index处值
  public void offsetSet ( mixed $index , mixed $newval )
  //删除指定index处节点
  public void offsetUnset ( mixed $index )
 
  //从双链表的尾部弹出元素
  public mixed pop ( void )
  //添加元素到双链表的尾部
  public void push ( mixed $value )
 
  //序列化存储
  public string serialize ( void )
  //反序列化
  public void unserialize ( string $serialized )
 
  //设置迭代模式
  public void setIteratorMode ( int $mode )
  //获取迭代模式SplDoublyLinkedList::IT_MODE_LIFO (Stack style) SplDoublyLinkedList::IT_MODE_FIFO (Queue style)
  public int getIteratorMode ( void )
 
  //双链表的头部移除元素
  public mixed shift ( void )
  //双链表的头部添加元素
  public void unshift ( mixed $value )
 
}

使用起来也是简单

$list = new SplDoublyLinkedList();
$list->push('a');
$list->push('b');
$list->push('c');
 
$list->unshift('top');
$list->shift();
 
print_r(array(
  'pop' => $list->pop(),
  'count' => $list->count(),
  'isEmpty' => $list->isEmpty(),
  'bottom' => $list->bottom(),
  'top' => $list->top()
));
 
$list->setIteratorMode(SplDoublyLinkedList::IT_MODE_FIFO);
print_r($list->getIteratorMode());
 
for($list->rewind(); $list->valid(); $list->next()) {
  echo $list->current().PHP_EOL;
}
 
print_r($a = $list->serialize());
//print_r($list->unserialize($a));
 
$list->offsetSet(0,'new one');
$list->offsetUnset(0);
print_r(array(
  'offsetExists' => $list->offsetExists(4),
  'offsetGet' => $list->offsetGet(0),
 
));
print_r($list);
PHP 相关文章推荐
用php实现像JSP,ASP里Application那样的全局变量
Jan 12 PHP
PHP类的使用 实例代码讲解
Dec 28 PHP
PHP 面向对象详解
Sep 13 PHP
php更新mysql后获取影响的行数发生异常解决方法
Mar 28 PHP
基于PHP输出缓存(output_buffering)的深入理解
Jun 13 PHP
摘自织梦CMS的HTTP文件下载类
Aug 08 PHP
php使用file函数、fseek函数读取大文件效率对比分析
Nov 04 PHP
Thinkphp结合ajaxFileUpload实现异步图片传输示例
Mar 13 PHP
PHP简单实现循环链表功能示例
Nov 10 PHP
php empty 函数判断结果为空但实际值却为非空的原因解析
May 28 PHP
PHP自动载入类文件函数__autoload的使用方法
Mar 25 PHP
Windows平台PHP+IECapt实现网页批量截图并创建缩略图功能详解
Aug 02 PHP
php实现每天自动变换随机问候语的方法
May 12 #PHP
PHP 数据结构队列(SplQueue)和优先队列(SplPriorityQueue)简单使用实例
May 12 #PHP
php对象和数组相互转换的方法
May 12 #PHP
PHP SPL标准库之数据结构堆(SplHeap)简单使用实例
May 12 #PHP
php对数组内元素进行随机调换的方法
May 12 #PHP
PHP SplObjectStorage使用实例
May 12 #PHP
PHP中预定义的6种接口介绍
May 12 #PHP
You might like
CodeIgniter框架过滤HTML危险代码
2014/06/12 PHP
memcache一致性hash的php实现方法
2015/03/05 PHP
PHP设计模式之模板方法模式实例浅析
2018/12/20 PHP
CI框架实现创建自定义类库的方法
2018/12/25 PHP
详解PHP的抽象类和抽象方法以及接口总结
2019/03/15 PHP
CSDN轮换广告图片轮换效果
2007/03/27 Javascript
图片延迟加载的实现代码(模仿懒惰)
2013/03/29 Javascript
JS中实现replaceAll的方法(实例代码)
2013/11/12 Javascript
三种方式获取XMLHttpRequest对象
2014/04/21 Javascript
JavaScript动态修改弹出窗口大小的方法
2015/04/06 Javascript
javascript中数组方法汇总
2015/07/07 Javascript
javascript实现C语言经典程序题
2015/11/29 Javascript
让你一句话理解闭包(简单易懂)
2016/06/03 Javascript
基于javascript实现数字英文验证码
2017/01/25 Javascript
详解Vue微信公众号开发踩坑全记录
2017/08/21 Javascript
Angular.js中window.onload(),$(document).ready()的写法浅析
2017/09/28 Javascript
浅谈webpack下的AOP式无侵入注入
2017/11/12 Javascript
vue导出html、word和pdf的实现代码
2018/07/31 Javascript
原生JS实现动态添加新元素、删除元素方法
2019/05/05 Javascript
JS一次前端面试经历记录
2020/03/19 Javascript
JavaScript实现移动端弹窗后禁止滚动
2020/05/25 Javascript
[03:57]DOTA2英雄梦之声_第03期_幻影刺客
2014/06/21 DOTA
[04:29]2014DOTA2国际邀请赛 主赛事第三日TOPPLAY
2014/07/21 DOTA
Python中用startswith()函数判断字符串开头的教程
2015/04/07 Python
python matplotlib绘图,修改坐标轴刻度为文字的实例
2018/05/25 Python
Python基于聚类算法实现密度聚类(DBSCAN)计算【测试可用】
2018/12/26 Python
python匿名函数用法实例分析
2019/08/03 Python
在jupyter notebook中调用.ipynb文件方式
2020/04/14 Python
JRE、JDK、JVM之间的关系怎样
2012/05/16 面试题
旅游管理专业生自荐信范文
2014/01/02 职场文书
人力资源主管的岗位职责
2014/03/15 职场文书
企业承诺书格式
2014/05/21 职场文书
小学绿色学校申报材料
2014/08/23 职场文书
2014年学校卫生工作总结
2014/11/20 职场文书
横空出世观后感
2015/06/09 职场文书
vue3中provide && inject的使用
2021/07/01 Vue.js