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获取网站域名和地址的代码
Aug 17 PHP
PHP 遍历XP文件夹下所有文件
Nov 27 PHP
PHP导航下拉菜单的实现如此简单
Sep 22 PHP
PHP字符串长度计算 - strlen()函数使用介绍
Oct 15 PHP
php+ajax导入大数据时产生的问题处理
Jun 11 PHP
ThinkPHP模板引擎之导入资源文件方法详解
Jun 18 PHP
phpmailer在服务器上不能正常发送邮件的解决办法
Jul 08 PHP
php+mysql大量用户登录解决方案分析
Dec 29 PHP
PHP实现的下载远程图片自定义函数分享
Jan 28 PHP
PHP的介绍以及优势详细分析
Sep 05 PHP
gearman管理工具GearmanManager的安装与php使用方法示例
Feb 27 PHP
php计数排序算法的实现代码(附四个实例代码)
Mar 31 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中CI操作多个数据库的代码
2012/07/05 PHP
Android ProgressBar进度条和ProgressDialog进度框的展示DEMO
2013/06/19 PHP
php实现无限级分类查询(递归、非递归)
2016/03/10 PHP
php模仿qq空间或朋友圈发布动态、评论动态、回复评论、删除动态或评论的功能(中)
2017/06/11 PHP
Js 中debug方式
2010/02/07 Javascript
jquery防止重复执行动画避免页面混乱
2014/04/22 Javascript
javascript实现2048游戏示例
2014/05/04 Javascript
浅谈String.valueOf()方法的使用
2016/06/06 Javascript
jQuery内容过滤选择器用法示例
2016/09/09 Javascript
Node.js的Mongodb使用实例
2016/12/30 Javascript
Bootstrap页面缩小变形的快速解决办法
2017/02/03 Javascript
NodeJs下的测试框架Mocha的简单介绍
2017/02/22 NodeJs
js 原生判断内容区域是否滚动到底部的实例代码
2017/11/15 Javascript
JavaScript折半查找(二分查找)算法原理与实现方法示例
2018/08/06 Javascript
JavaScript中的垃圾回收与内存泄漏示例详解
2019/05/02 Javascript
关于微信小程序获取小程序码并接受buffer流保存为图片的方法
2019/06/07 Javascript
vue实现下载文件流完整前后端代码
2020/11/17 Vue.js
python统计一个文本中重复行数的方法
2014/11/19 Python
python实现实时监控文件的方法
2016/08/26 Python
对python 命令的-u参数详解
2018/12/03 Python
python3.4 将16进制转成字符串的实例
2019/06/12 Python
Python使用APScheduler实现定时任务过程解析
2019/09/11 Python
python opencv圆、椭圆与任意多边形的绘制实例详解
2020/02/06 Python
Python之关于类变量的两种赋值区别详解
2020/03/12 Python
Python描述符descriptor使用原理解析
2020/03/21 Python
Python填充任意颜色,不同算法时间差异分析说明
2020/05/16 Python
Python连接Impala实现步骤解析
2020/08/04 Python
Python文件操作及内置函数flush原理解析
2020/10/13 Python
哪些情况下不应该使用索引
2015/07/20 面试题
运动会广播稿300字
2014/01/10 职场文书
党委书记个人对照检查材料
2014/09/15 职场文书
2014年扫黄打非工作总结
2014/12/03 职场文书
高校教师个人工作总结2014
2014/12/17 职场文书
大学学生会主席竞选稿
2015/11/19 职场文书
《暗黑破坏神2:重制版》本周进行第一轮A测 目前可官网进行申请报名
2021/04/07 其他游戏
CocosCreator如何实现划过的位置显示纹理
2021/04/14 Javascript