【SPL标准库专题(4)】 Datastructures: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 )
}
- 实现了Iterator接口,可以快速实现迭代;
- 实现了 ArrayAccess 接口, 可以如数组般访问链表数据;
$list = new SplDoublyLinkedList();
$list->push('a');
$list->push('b');
$list->push('c');
$list->push('d');
# 方法看看名称就能理解了,主要介绍以下几个地方;
/*
# 此时的链表结构
[0] => a
[1] => b
[2] => c
[3] => d
*/
$list->add(1,'z');
// 由于实现了接口ArrayAccess所以可以像操作数组那样操作数据;
echo $list[2];
/*
# 此时的链表结构
[0] => a
[1] => z
[2] => b
[3] => c
[4] => d
*/
//设置一个迭代模式进行迭代↓↓;
$list->setIteratorMode(SplDoublyLinkedList::IT_MODE_FIFO);
$iteratorMode = $list->getIteratorMode(); //获取当前的迭代模式
/*
# 关于模式
IT_MODE_LIFO: Stack style, 后入先出,堆结构
IT_MODE_FIFO: Queue style, 先入先出,队列结构(默认)
IT_MODE_DELETE: Elements are deleted by the iterator 一边迭代,一边删除
IT_MODE_KEEP: Elements are traversed by the iterator 普通迭代,不删除(默认)
*/
// ↓↓设置是否在迭代的时候删除元素
$list->setIteratorMode(SplDoublyLinkedList::IT_MODE_DELETE);
for ($list->rewind(); $list->valid(); $list->next()) {
echo $list->current()."\n";
}
for ($list->rewind(); $list->valid(); $list->next()) {
echo $list->current()."\n";
}
其他的方法手册看看名称都能理解,就不说明了:
http://php.net/manual/zh/class.spldoublylinkedlist.php
【SPL标准库专题(4)】 Datastructures:SplDoublyLinkedList的更多相关文章
- 【SPL标准库专题(1)】 SPL简介
什么是SPL SPL是Standard PHP Library(PHP标准库)的缩写. 根据官方定义,它是"a collection of interfaces and classes th ...
- 【SPL标准库专题(9)】 Datastructures:SplObjectStorage
PHP SPL SplObjectStorage是用来存储一组对象的,特别是当你需要唯一标识对象的时候. PHP SPL SplObjectStorage类实现了Countable,Iterator, ...
- 【SPL标准库专题(5)】 Datastructures:SplStack & SplQueue
这两个类都是继承自SplDoublyLinkedList,分别派生自SplDoublyLinkedList的堆栈模式和队列模式:所以放在一起来介绍: 堆栈SplStack # 类摘要 SplStack ...
- 【SPL标准库专题(8)】 Datastructures:SplFixedArray
SplFixedArray主要是处理数组相关的主要功能,与普通php array不同的是,它是固定长度的,且以数字为键名的数组,优势就是比普通的数组处理更快. 类摘要 SplFixedArray im ...
- 【SPL标准库专题(7)】 Datastructures:SplHeap & SplMaxHeap & SplMinHeap
堆(Heap)就是为了实现优先队列而设计的一种数据结构,它是通过构造二叉堆(二叉树的一种)实现.根节点最大的堆叫做最大堆或大根堆,根节点最小的堆叫做最小堆或小根堆.二叉堆还常用于排序(堆排序). 类摘 ...
- 【SPL标准库专题(6)】 Datastructures:SplPriorityQueue
普通的队列是一种先进先出的数据结构,元素在队列尾追加,而从队列头取出.在优先队列中,元素被赋予优先级.当访问元素时,具有最高优先级的元素最先取出.优先队列具有最高级先出 (largest-in,fir ...
- 【SPL标准库专题(3)】 Classes
我把SPL分为四个部分:Iterator,Classes,Datastructures,Function:而其中classes是就是做一些类的介绍(Iterator与Datastructures相关的 ...
- 【SPL标准库专题(10)】SPL Exceptions
嵌套异常 了解SPL异常之前,我们先了解一下嵌套异常.嵌套异常顾名思义就是异常里面再嵌套异常,一个异常抛出,在catch到以后再抛出异常,这时可以通过Exception基类的getPrevious方法 ...
- 【SPL标准库专题(2)】 Iterator
Iterator界面 本段内容来自阮一峰老师再加自己的部分注解 SPL规定,所有部署了Iterator界面的class,都可以用在foreach Loop中.Iterator界面中包含5个必须部署的方 ...
随机推荐
- Spring Boot + docker +mongo
启动mongo镜像 docker run --name mongo-container -d -P mongo 连接到容器内 docker exec -it eb sh 输入:mongo 输入:sho ...
- 02-03:springboot 整合listener
1.通过注解扫描完成Listener组件的注册 1.1 编写listener /** * Springboot 整合listener */ import javax.servlet.ServletCo ...
- java concurrent 探秘
我们都知道,在JDK1.5之前,Java中要进行业务并发时,通常需要有程序员独立完成代码实现,当然也有一些开源的框架提供了这些功能,但是这些依然没有JDK自带的功能使用起来方便.而当针对高质量Java ...
- 页面出现Incorrect string以及数据库内容乱码
我在制作 (www.helpqy.com) 的时候遇到了页面报错Incorrect string的问题,我使用的是mysql,数据表中有很多中文内容,最后发现在安装mysql的时候需要选择defaul ...
- JAVA里的VO、BO、PO分别指什么?
VO(value object) 值对象 通常用于业务层之间的数据传递,和PO一样也是仅仅包含数据而已.但应是抽象出的业务对象,可以和表对应,也可以不,这根据业务的需要.个人觉得同DTO(数据传输对象 ...
- StreamReader 的ReadLine,Read,ReadToEnd方法
1.ReadLine() 当遇到\n \r 或者是\r\n的时候 此方法返回这前面的字符串,然后内部的指针往后移一位下次从新的地方开始读,直到遇到数据的结尾处返回null,所以经常这样使用 ...
- JSON & Ajax
Ajax是异步JavaScript和XML是用来在客户端作为一组相互关联的Web开发技术,以创建异步Web应用程序. Ajax模型,Web应用程序可以发送数据和检索数据从一个服务器,而不干扰现有的页面 ...
- 主键(primary key)和唯一索引(unique index)区别
主键一定是唯一性索引,唯一性索引并不一定就是主键. 所谓主键就是能够唯一标识表中某一行的属性或属性组,一个表只能有一个主键,但可以有多个候选索引.因为主键可以唯一标识某一行记录,所以可以确保执行数据 ...
- MySQL,Oracle建立主键自增表
MySQL 在建表的时候声明字段即可 id int auto_increment primary key not null Oracle 第一步:建立表 drop table t_role; crea ...
- 1.Strategy Pattern(策略模式)
策略模式(Strategy Pattern): 我的理解,将代码中每个变化之处抽出,提炼成一个一个的接口或者抽象类,让这些变化实现接口或继承抽象类成为具体的变化类.再利用多态的功能,可将变化之处用接口 ...