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 开发工具
Dec 06 PHP
PHP 数组入门教程小结
May 20 PHP
用PHP为SHOPEX增加日志功能代码
Jul 02 PHP
PHP性能优化工具篇Benchmark类调试执行时间
Dec 06 PHP
编写Smarty插件在模板中直接加载数据的详细介绍
Jun 26 PHP
php strrpos()与strripos()函数
Aug 31 PHP
PHP生成随机密码类分享
Jun 25 PHP
PHP随机数 C扩展随机数
May 04 PHP
PHP常用文件操作函数和简单实例分析
Jun 03 PHP
php实现36进制与10进制转换功能示例
Jan 10 PHP
Laravel 5.4.36中session没有保存成功问题的解决
Feb 19 PHP
Laravel向公共模板赋值方法总结
Jun 25 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获取当前日期所在星期(月份)的开始日期与结束日期(实现代码)
2013/06/18 PHP
PHP网络操作函数汇总
2015/05/18 PHP
jquery ajax提交表单数据的两种实现方法
2010/04/29 Javascript
javascript编码的几个方法详细介绍
2013/01/06 Javascript
浅析return false的正确使用
2013/11/04 Javascript
jQuery如何取id有.的值一般的方法是取不到的
2014/04/18 Javascript
js获取鼠标点击的位置实现思路及代码
2014/05/09 Javascript
在JavaScript中操作时间之getYear()方法的使用教程
2015/06/11 Javascript
jquery实现用户信息修改验证输入方法汇总
2015/07/18 Javascript
AngularJS基础 ng-cloak 指令简单示例
2016/08/01 Javascript
JavaScript验证知识整理
2017/03/24 Javascript
vue loadmore组件上拉加载更多功能示例代码
2017/07/19 Javascript
JS中的算法与数据结构之常见排序(Sort)算法详解
2019/08/16 Javascript
js实现贪吃蛇小游戏(加墙)
2020/07/31 Javascript
vue单元格多列合并的实现
2020/11/26 Vue.js
python实现中文输出的两种方法
2015/05/09 Python
Python中条件判断语句的简单使用方法
2015/08/21 Python
Python 获得13位unix时间戳的方法
2017/10/20 Python
python实现数据导出到excel的示例--普通格式
2018/05/03 Python
python使用numpy读取、保存txt数据的实例
2018/10/14 Python
python 使用正则表达式按照多个空格分割字符的实例
2018/12/20 Python
Django自定义用户登录认证示例代码
2019/06/30 Python
pycharm设置默认的UTF-8编码模式的方法详解
2020/06/01 Python
使用keras内置的模型进行图片预测实例
2020/06/17 Python
python的json包位置及用法总结
2020/06/21 Python
Python常用数字处理基本操作汇总
2020/09/10 Python
南京某软件公司的.net面试题
2015/11/30 面试题
教师推荐信范文
2013/11/24 职场文书
护理学专业推荐信
2013/12/03 职场文书
基层党支部公开承诺书
2014/05/29 职场文书
交通事故被告答辩状
2015/05/22 职场文书
费城故事观后感
2015/06/10 职场文书
2015质检员个人年终工作总结
2015/10/23 职场文书
个人工作总结怎么写?
2019/04/09 职场文书
阿里云国际版 使用Nginx作为HTTPS转发代理服务器
2022/05/11 Servers
HTML中实现音乐或视频自动播放案例详解
2022/05/30 HTML / CSS