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 中的类
Oct 09 PHP
PHP安装攻略:常见问题解答(二)
Oct 09 PHP
在IIS上安装PHP4.0正式版
Oct 09 PHP
php smarty函数扩展
Mar 15 PHP
php 获取百度的热词数据的代码
Feb 18 PHP
php中选择什么接口(mysql、mysqli)访问mysql
Feb 06 PHP
php操作mysqli(示例代码)
Oct 28 PHP
symfony表单与页面实现技巧
Jan 26 PHP
简单了解将WordPress中的工具栏移到底部的小技巧
Dec 31 PHP
PHP  实现等比压缩图片尺寸和大小实例代码
Oct 08 PHP
TP(thinkPHP)框架多层控制器和多级控制器的使用示例
Jun 13 PHP
php和js实现根据子网掩码和ip计算子网功能示例
Nov 09 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中通过ADO调用Asscess数据库和COM程序
2006/10/09 PHP
php获取发送给用户的header信息的方法
2015/03/16 PHP
详解PHP实现执行定时任务
2015/12/21 PHP
Laravel手动分页实现方法详解
2016/10/09 PHP
利用Homestead快速运行一个Laravel项目的方法详解
2017/11/14 PHP
php workerman定时任务的实现代码
2018/12/23 PHP
PHP面向对象程序设计模拟一般面向对象语言中的方法重载(overload)示例
2019/06/13 PHP
php使用pthreads v3多线程实现抓取新浪新闻信息操作示例
2020/02/21 PHP
PHP 计算至少是其他数字两倍的最大数的实现代码
2020/05/26 PHP
js中if语句的几种优化代码写法
2011/03/12 Javascript
Js-$.extend扩展方法使方法参数更灵活
2013/01/15 Javascript
JS+CSS设置img在DIV中只显示Img垂直居中的部分
2013/10/24 Javascript
利用try-catch判断变量是已声明未声明还是未赋值
2014/03/12 Javascript
Node.js 去掉种子(torrent)文件里的邪恶信息
2015/03/27 Javascript
ionic2 tabs使用 Modal底部tab弹出框
2016/12/30 Javascript
jQuery基于ajax方式实现用户名存在性检查功能示例
2017/02/10 Javascript
JavaScript判断浏览器和hack滚动条的写法
2017/07/23 Javascript
详解nodejs通过代理(proxy)发送http请求(request)
2017/09/22 NodeJs
vue2.0 自定义 饼状图 (Echarts)组件的方法
2018/03/02 Javascript
vue 解决异步数据更新问题
2019/10/29 Javascript
[46:59]完美世界DOTA2联赛PWL S2 GXR vs Ink 第二场 11.19
2020/11/20 DOTA
在Linux上安装Python的Flask框架和创建第一个app实例的教程
2015/03/30 Python
Python 爬虫多线程详解及实例代码
2016/10/08 Python
使用python将图片格式转换为ico格式的示例
2018/10/22 Python
python使用threading.Condition交替打印两个字符
2019/05/07 Python
python读取图片的方式,以及将图片以三维数组的形式输出方法
2019/07/03 Python
tensorflow模型继续训练 fineturn实例
2020/01/21 Python
纯CSS实现的大小渐变、渐远效果
2014/04/15 HTML / CSS
施华洛世奇中国官网:SWAROVSKI中国
2020/06/16 全球购物
final, finally, finalize的区别
2012/03/01 面试题
大学生求职中的自我评价
2013/10/01 职场文书
跑操口号
2014/06/12 职场文书
先进基层党组织材料
2014/12/25 职场文书
画展邀请函
2015/01/31 职场文书
redis击穿 雪崩 穿透超详细解决方案梳理
2022/03/17 Redis
Python matplotlib绘制雷达图
2022/04/13 Python