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 相关文章推荐
Ajax PHP分页演示
Jan 02 PHP
PHP程序61条面向对象分析设计的经验小结
Nov 12 PHP
php表单转换textarea换行符的方法
Sep 10 PHP
PHP取进制余数函数代码
Jan 19 PHP
PHP数据集构建JSON格式及新数组的方法
Nov 07 PHP
Mysql中分页查询的两个解决方法比较
May 02 PHP
php读取目录及子目录下所有文件名的方法
Oct 20 PHP
Apache无法自动跳转却显示目录的解决方法
Nov 30 PHP
PHP 读取大文件并显示的简单实例(推荐)
Aug 12 PHP
PHP目录与文件操作技巧总结(创建,删除,遍历,读写,修改等)
Sep 11 PHP
PHP对象实例化单例方法
Jan 19 PHP
php高性能日志系统 seaslog 的安装与使用方法分析
Feb 29 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
codeigniter教程之多文件上传使用示例
2014/02/11 PHP
为你总结一些php信息函数
2015/10/21 PHP
在 Laravel 项目中使用 webpack-encore的方法
2019/07/21 PHP
js滚动条多种样式,推荐
2007/02/05 Javascript
asp.net HttpHandler实现图片防盗链
2009/11/09 Javascript
Javascript 中介者模式实例
2009/12/16 Javascript
js数组操作常用方法
2014/05/08 Javascript
js取整数、取余数的方法
2014/05/11 Javascript
javascript中2个感叹号的用法实例详解
2014/09/04 Javascript
js函数与php函数的区别实例浅析
2015/01/12 Javascript
被遗忘的javascript的slice() 方法
2015/04/20 Javascript
js获取新浪天气接口的实现代码
2016/06/06 Javascript
浅谈js中调用函数时加不加括号的问题
2016/07/28 Javascript
微信小程序-拍照或选择图片并上传文件
2017/01/06 Javascript
如何解决vue与传统jquery插件冲突
2017/03/20 Javascript
基于Two.js实现星球环绕动画效果的示例
2017/11/06 Javascript
js保留两位小数方法总结
2018/01/31 Javascript
Node.js API详解之 module模块用法实例分析
2020/05/13 Javascript
pandas按若干个列的组合条件筛选数据的方法
2018/04/11 Python
解决Python pandas plot输出图形中显示中文乱码问题
2018/12/12 Python
python实现转圈打印矩阵
2019/03/02 Python
Python递归函数 二分查找算法实现解析
2019/08/12 Python
python 截取XML中bndbox的坐标中的图像,另存为jpg的实例
2020/03/10 Python
最好的意大利皮夹克:D’Arienzo
2018/12/04 全球购物
什么是Linux虚拟文件系统VFS
2012/01/31 面试题
Java程序开发中如何应用线程
2016/03/03 面试题
Unix如何添加新的用户
2014/08/20 面试题
故意杀人罪辩护词
2015/05/21 职场文书
中学政教处工作总结
2015/08/13 职场文书
歌咏比赛口号大全
2015/12/25 职场文书
六年级情感作文之500字
2019/10/23 职场文书
导游词之宁夏贺兰山岩画
2019/11/08 职场文书
Python使用scapy模块发包收包
2021/05/07 Python
浅谈Java实现分布式事务的三种方案
2021/06/11 Java/Android
Python接口自动化之文件上传/下载接口详解
2022/04/05 Python
Windows和Linux上部署Golang并运行程序
2022/04/22 Servers