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 相关文章推荐
桌面中心(三)修改数据库
Oct 09 PHP
php 攻击方法之谈php+mysql注射语句构造
Oct 30 PHP
模板引擎正则表达式调试小技巧
Jul 20 PHP
PHP取进制余数函数代码
Jan 19 PHP
关于Iframe如何跨域访问Cookie和Session的解决方法
Apr 15 PHP
如何使用Strace调试工具
Jun 03 PHP
PHP使用PHPMailer发送邮件的简单使用方法
Nov 12 PHP
PHP实现下载断点续传的方法
Nov 12 PHP
PHP实现的蚂蚁爬杆路径算法代码
Dec 03 PHP
PHP获取指定时间段之间的 年,月,天,时,分,秒
Jun 05 PHP
php in_array() 检查数组中是否存在某个值详解
Nov 23 PHP
PHP编程文件处理类SplFileObject和SplFileInfo用法实例分析
Jul 22 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
PHP 时间转换Unix时间戳代码
2010/01/22 PHP
php防止CC攻击代码 php防止网页频繁刷新
2015/12/21 PHP
phpmailer简单发送邮件的方法(附phpmailer源码下载)
2016/06/13 PHP
PHP命名空间与自动加载类详解
2018/09/04 PHP
javascript中不等于的代码是什么怎么写
2013/12/29 Javascript
javascript模拟命名空间
2015/04/17 Javascript
全面解析Bootstrap弹窗的实现方法
2015/12/01 Javascript
jQuery中可见性过滤器简单用法示例
2018/03/31 jQuery
详解nodejs通过响应回写的方式渲染页面资源
2018/04/07 NodeJs
小程序云开发初探(小结)
2018/10/24 Javascript
layui加载表格,绑定新增,编辑删除,查看按钮事件的例子
2019/09/06 Javascript
使用Node.js在深度学习中做图片预处理的方法
2019/09/18 Javascript
layui 图片上传+表单提交+ Spring MVC的实例
2019/09/21 Javascript
JS实现轮播图效果
2020/01/11 Javascript
JS获取当前时间戳方法解析
2020/08/29 Javascript
python实现每次处理一个字符的三种方法
2014/10/09 Python
python黑魔法之参数传递
2016/02/12 Python
Python cookbook(数据结构与算法)实现对不原生支持比较操作的对象排序算法示例
2018/03/15 Python
pandas 把数据写入txt文件每行固定写入一定数量的值方法
2018/12/28 Python
详解pandas库pd.read_excel操作读取excel文件参数整理与实例
2019/02/17 Python
python代码xml转txt实例
2020/03/10 Python
PyQt5 界面显示无响应的实现
2020/03/26 Python
Python基于httpx模块实现发送请求
2020/07/07 Python
Bose英国官方网站:美国知名音响品牌
2020/01/26 全球购物
策划主管的工作职责
2013/11/24 职场文书
党员学习十八大感想
2014/01/17 职场文书
法制宣传实施方案
2014/03/13 职场文书
2014迎国庆标语大全
2014/09/19 职场文书
大学生上课迟到检讨书
2014/10/15 职场文书
工作失误检讨书范文
2015/01/26 职场文书
2015年超市员工工作总结
2015/05/04 职场文书
领导干部学习心得体会
2016/01/23 职场文书
廉洁自律承诺书2016
2016/03/25 职场文书
python中的None与NULL用法说明
2021/05/25 Python
手写实现JS中的new
2021/11/07 Javascript
openEuler 搭建java开发环境的详细过程
2022/06/10 Servers