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 相关文章推荐
模仿OSO的论坛(五)
Oct 09 PHP
PHP5.2中date()函数显示时间与北京时间相差8小时的解决办法
May 28 PHP
PHP输出当前进程所有变量/常量/模块/函数/类的示例
Nov 07 PHP
PHP中使用gettext解决国际化问题的例子(i18n)
Jun 13 PHP
CodeIgniter实现更改view文件夹路径的方法
Jul 04 PHP
php读取目录及子目录下所有文件名的方法
Oct 20 PHP
thinkphp普通查询与表达式查询实例分析
Nov 24 PHP
php模拟服务器实现autoindex效果的方法
Mar 10 PHP
PHP 实现类似js中alert() 提示框
Mar 18 PHP
PHP使用NuSOAP调用Web服务的方法
Jul 18 PHP
PHP实现的函数重载功能示例
Aug 03 PHP
php json转换相关知识(小结)
Dec 21 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+MySql+jQuery实现的"顶"和"踩"投票功能
2016/05/21 PHP
节点的插入之append()和appendTo()的用法介绍
2014/01/13 Javascript
jQuery蓝色风格滑动导航栏代码分享
2015/08/19 Javascript
jQuery进行组件开发完整实例
2015/12/15 Javascript
JS中frameset框架弹出层实例代码
2016/04/01 Javascript
Vue.JS入门教程之自定义指令
2016/12/08 Javascript
vue实现商城上货组件简易版
2017/11/27 Javascript
微信小程序制作表格的方法
2019/02/14 Javascript
基于Vue实现的多条件筛选功能的详解(类似京东和淘宝功能)
2019/05/07 Javascript
Vue.js组件使用props传递数据的方法
2019/10/19 Javascript
VUE 实现动态给对象增加属性,并触发视图更新操作示例
2019/11/29 Javascript
[54:29]2018DOTA2亚洲邀请赛 4.7 淘汰赛 VP vs LGD 第二场
2018/04/09 DOTA
[48:18]DOTA2-DPC中国联赛 正赛 RNG vs Dynasty BO3 第二场 1月29日
2021/03/11 DOTA
在Python的Flask框架中实现单元测试的教程
2015/04/20 Python
Python脚本实现Web漏洞扫描工具
2016/10/25 Python
Python 爬虫图片简单实现
2017/06/01 Python
Python数据操作方法封装类实例
2017/06/23 Python
利用python对Excel中的特定数据提取并写入新表的方法
2018/06/14 Python
python遍历文件夹,指定遍历深度与忽略目录的方法
2018/07/11 Python
python自动化测试之DDT数据驱动的实现代码
2019/07/23 Python
django基于restframework的CBV封装详解
2019/08/08 Python
详解Selenium 元素定位和WebDriver常用方法
2020/12/04 Python
next在python中返回迭代器的实例方法
2020/12/15 Python
CSS中几个与换行有关的属性简明总结
2014/04/15 HTML / CSS
css3 media 响应式布局的简单实例
2016/08/03 HTML / CSS
html5 Canvas画图教程(2)—画直线与设置线条的样式如颜色/端点/交汇点
2013/01/09 HTML / CSS
Fairyseason:为个人和批发商提供女装和配件
2017/03/01 全球购物
英国最大的在线奢侈手表零售商:Jura Watches
2018/01/29 全球购物
英国网上购买门:Direct Doors
2018/06/07 全球购物
决心书标准格式
2014/03/11 职场文书
《故乡》教学反思
2014/04/10 职场文书
复试通知单模板
2015/04/24 职场文书
离婚起诉书怎么写
2015/05/19 职场文书
毕业生入职感言
2015/07/31 职场文书
jQuery实现影院选座订座效果
2021/04/13 jQuery
低门槛开发iOS、Android、小程序应用的前端框架详解
2021/10/16 Javascript