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 相关文章推荐
WordPress判断用户是否登录的代码
Mar 17 PHP
PHP导入Excel到MySQL的方法
Apr 23 PHP
PHP中使用数组实现堆栈数据结构的代码
Feb 05 PHP
php操作csv文件代码实例汇总
Sep 22 PHP
php中get_cfg_var()和ini_get()的用法及区别
Mar 04 PHP
php中将一个对象保存到Session中的方法
Mar 13 PHP
Yii开启片段缓存的方法
Mar 28 PHP
PHP获取指定时间段之间的 年,月,天,时,分,秒
Jun 05 PHP
微信支付开发告警通知实例
Jul 12 PHP
Fleaphp常见函数功能与用法示例
Nov 15 PHP
PHP和MYSQL实现分页导航思路详解
Apr 11 PHP
laravel添加前台跳转成功页面示例
Oct 22 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 str_getcsv把字符串解析为数组的实现方法
2017/04/05 PHP
js wmp操作代码小结(音乐连播功能)
2008/11/08 Javascript
JavaScript Konami Code 实现代码
2009/07/29 Javascript
JavaScript入门之基本函数详解
2011/10/21 Javascript
jQuery中实现动画效果的基本操作介绍
2013/04/16 Javascript
获取offsetTop和offsetLeft值的js代码(兼容)
2013/04/16 Javascript
解析js原生方法创建表格效率测试
2013/07/08 Javascript
JSON 数字排序多字段排序介绍
2013/09/18 Javascript
jQuery插件之jQuery.Form.js用法实例分析(附demo示例源码)
2016/01/04 Javascript
对js中回调函数的一些看法
2016/08/29 Javascript
详解JavaScript中数组的reduce方法
2016/12/02 Javascript
Bootstrap 模态框(Modal)插件代码解析
2016/12/21 Javascript
Vue2仿淘宝实现省市区三级联动
2020/04/15 Javascript
详解vue-cli 本地开发mock数据使用方法
2018/05/29 Javascript
微信小程序自定义底部弹出框
2020/11/16 Javascript
浅谈Vue数据响应
2018/11/05 Javascript
js module大战
2019/04/19 Javascript
taro开发微信小程序的实践
2019/05/21 Javascript
Vue 中使用lodash对事件进行防抖和节流操作
2020/07/26 Javascript
跟老齐学Python之赋值,简单也不简单
2014/09/24 Python
Python编程把二叉树打印成多行代码
2018/01/04 Python
使用python进行波形及频谱绘制的方法
2019/06/17 Python
基于python 等频分箱qcut问题的解决
2020/03/03 Python
基于python生成英文版词云图代码实例
2020/05/16 Python
挪威手表购物网站:Klokker
2016/09/19 全球购物
德国电子商城:ComputerUniverse
2017/04/21 全球购物
Needle & Thread官网:英国仙女品牌
2018/01/13 全球购物
银行会计财务工作个人的自我评价
2013/10/29 职场文书
购房意向书范本
2014/04/01 职场文书
2014年师德师风学习材料
2014/05/16 职场文书
关于诚信的活动方案
2014/08/18 职场文书
2015年公务员工作总结
2015/04/24 职场文书
施工现场安全管理制度
2015/08/05 职场文书
祝福语集锦:给百岁老人祝寿贺词
2019/11/19 职场文书
Go缓冲channel和非缓冲channel的区别说明
2021/04/25 Golang
MySQL利用UNION连接2个查询排序失效详解
2021/11/20 MySQL