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 相关文章推荐
Zend Studio 无法启动的问题解决方法
Dec 04 PHP
PHP 强制下载文件代码
Oct 24 PHP
PHP实现邮件群发的源码
Jun 18 PHP
PHP函数addslashes和mysql_real_escape_string的区别
Apr 22 PHP
php生成随机密码自定义函数代码(简单快速)
May 10 PHP
php冒泡排序与快速排序实例详解
Dec 07 PHP
PHP MYSQL简易交互式站点开发
Dec 27 PHP
PHP获取文件扩展名的方法实例总结
Jun 10 PHP
如何直接访问php实例对象中的private属性详解
Oct 12 PHP
Laravel推荐使用的十个辅助函数
May 10 PHP
php连接mysql数据库最简单的实现方法
Sep 24 PHP
PHP7生产环境队列Beanstalkd用法详解
May 19 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制作简单的内容采集器的原理分析
2008/10/01 PHP
兼容性比较好的PHP生成缩略图的代码
2011/01/12 PHP
php利用反射实现插件机制的方法
2015/03/14 PHP
Zend Framework教程之连接数据库并执行增删查的方法(附demo源码下载)
2016/03/21 PHP
php微信浏览器分享设置以及回调详解
2016/08/01 PHP
两个select之间option的互相添加操作(jquery实现)
2009/11/12 Javascript
JavaScript 保存数组到Cookie的代码
2010/04/14 Javascript
jquery1.4.2 for Visual studio 2010 模板文件
2010/07/14 Javascript
jquery 表格的增行删行实现思路
2013/03/21 Javascript
Jquery绑定事件(bind和live的区别介绍)
2013/08/23 Javascript
判断客户浏览器是否支持cookie的示例代码
2013/12/23 Javascript
javaScript 页面自动加载事件详解
2014/02/10 Javascript
JavaScript判断一个字符串是否包含指定子字符串的方法
2015/03/18 Javascript
jquery捕捉回车键及获取checkbox值与异步请求的方法
2015/12/24 Javascript
angularjs过滤器--filter与ng-repeat配合有奇效
2017/04/20 Javascript
详解Node.js串行化流程控制
2017/05/04 Javascript
Angular2.js实现表单验证详解
2017/06/23 Javascript
vue-router项目实战总结篇
2018/02/11 Javascript
[01:06:39]DOTA2上海特级锦标赛主赛事日 - 1 胜者组第一轮#1Liquid VS Alliance第三局
2016/03/02 DOTA
python实现随机密码字典生成器示例
2014/04/09 Python
全面了解Python的getattr(),setattr(),delattr(),hasattr()
2016/06/14 Python
Python Json模块中dumps、loads、dump、load函数介绍
2018/05/15 Python
cmd运行python文件时对结果进行保存的方法
2018/05/16 Python
caffe binaryproto 与 npy相互转换的实例讲解
2018/07/09 Python
利用anaconda作为python的依赖库管理方法
2019/08/13 Python
python中yield的用法详解
2021/01/13 Python
css3实现画半圆弧线的示例代码
2017/11/06 HTML / CSS
荷兰优雅女装网上商店:Heine
2016/11/14 全球购物
北美大型运动类产品商城:Champs Sports
2017/01/12 全球购物
Bonami斯洛伐克:购买家具和家居饰品
2019/07/02 全球购物
工厂仓管员岗位职责
2014/01/01 职场文书
运动会通讯稿500字
2014/02/20 职场文书
个人房屋租赁合同(标准范本)
2019/09/16 职场文书
关于Vue Router的10条高级技巧总结
2021/05/06 Vue.js
Python实现查询剪贴板自动匹配信息的思路详解
2021/07/09 Python
Python中异常处理用法
2021/11/27 Python