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 XML数据解析代码
May 26 PHP
探讨PHP中this,self,parent的区别详解
Jun 08 PHP
PHP实现定时执行任务的方法
Oct 05 PHP
PHP 获取ip地址代码汇总
Jul 05 PHP
PHP中Closure类的使用方法及详解
Oct 09 PHP
thinkphp中字符截取函数msubstr()用法分析
Jan 09 PHP
thinkPHP多域名情况下使用memcache方式共享session数据的实现方法
Jul 21 PHP
Thinkphp 中 distinct 的用法解析
Dec 14 PHP
php获取字符串前几位的实例(substr返回字符串的子串用法)
Mar 08 PHP
PHP文件系统管理(实例讲解)
Sep 19 PHP
thinkPHP框架实现的无限回复评论功能示例
Jun 09 PHP
laravel 获取当前url的别名方法
Oct 11 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
phpmyadmin 访问被拒绝的真实原因
2009/06/15 PHP
IIS下PHP连接数据库提示mysql undefined function mysql_connect()
2010/06/04 PHP
php中导出数据到excel时数字变为科学计数的解决方法
2013/02/03 PHP
php数组中包含中文的排序方法
2014/06/03 PHP
PHP aes (ecb)解密后乱码问题
2015/06/22 PHP
php socket通信简单实现
2016/11/18 PHP
javascript将数组插入到另一个数组中的代码
2013/01/10 Javascript
JS 页面计时器示例代码
2013/10/28 Javascript
javascript 拷贝节点cloneNode()使用介绍
2014/04/03 Javascript
js验证IP及子网掩码的合法性有效性示例
2014/04/30 Javascript
jQuery实现带动画效果的二级下拉导航方法
2015/03/11 Javascript
javascript字符串与数组转换汇总
2015/05/26 Javascript
jQuery中prepend()方法使用详解
2015/08/11 Javascript
Highcharts使用简例及异步动态读取数据
2015/12/30 Javascript
JS仿百度自动下拉框模糊匹配提示
2016/07/25 Javascript
jQuery中each循环的跳出和结束实例
2017/08/16 jQuery
vue登录路由验证的实现
2017/12/13 Javascript
webpack 模块热替换原理
2018/04/09 Javascript
javascript中一些奇葩的日期换算方法总结
2018/11/14 Javascript
解决layui laydate 时间控件一闪而过的问题
2019/09/28 Javascript
vue实现div可拖动位置也可改变盒子大小的原理
2020/09/16 Javascript
vue-cli —— 如何局部修改Element样式
2020/10/22 Javascript
[49:21]完美世界DOTA2联赛循环赛 Ink Ice vs LBZS BO2第二场 11.05
2020/11/06 DOTA
Python中用Ctrl+C终止多线程程序的问题解决
2013/03/30 Python
举例讲解Python的Tornado框架实现数据可视化的教程
2015/05/02 Python
python 实现自动远程登陆scp文件实例代码
2017/03/13 Python
python实现烟花小程序
2019/01/30 Python
python openCV自制绘画板
2020/10/27 Python
python re的findall和finditer的区别详解
2020/11/15 Python
正规的求职信范文分享
2013/12/11 职场文书
2014年计算机专业个人自我评价
2014/01/19 职场文书
初中英语教师个人工作总结2015
2015/07/21 职场文书
500字作文之关于爸爸
2019/11/14 职场文书
基于Redis位图实现用户签到功能
2021/05/08 Redis
Element实现动态表格的示例代码
2021/08/02 Javascript
基于Python实现一个春节倒计时脚本
2022/01/22 Python