简述

双链表是一种重要的线性存储结构,对于双链表中的每个节点,不仅仅存储自己的信息,还要保存前驱和后继节点的地址。

类摘要

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的更多相关文章

  1. 【SPL标准库专题(1)】 SPL简介

    什么是SPL SPL是Standard PHP Library(PHP标准库)的缩写. 根据官方定义,它是"a collection of interfaces and classes th ...

  2. 【SPL标准库专题(9)】 Datastructures:SplObjectStorage

    PHP SPL SplObjectStorage是用来存储一组对象的,特别是当你需要唯一标识对象的时候. PHP SPL SplObjectStorage类实现了Countable,Iterator, ...

  3. 【SPL标准库专题(5)】 Datastructures:SplStack & SplQueue

    这两个类都是继承自SplDoublyLinkedList,分别派生自SplDoublyLinkedList的堆栈模式和队列模式:所以放在一起来介绍: 堆栈SplStack # 类摘要 SplStack ...

  4. 【SPL标准库专题(8)】 Datastructures:SplFixedArray

    SplFixedArray主要是处理数组相关的主要功能,与普通php array不同的是,它是固定长度的,且以数字为键名的数组,优势就是比普通的数组处理更快. 类摘要 SplFixedArray im ...

  5. 【SPL标准库专题(7)】 Datastructures:SplHeap & SplMaxHeap & SplMinHeap

    堆(Heap)就是为了实现优先队列而设计的一种数据结构,它是通过构造二叉堆(二叉树的一种)实现.根节点最大的堆叫做最大堆或大根堆,根节点最小的堆叫做最小堆或小根堆.二叉堆还常用于排序(堆排序). 类摘 ...

  6. 【SPL标准库专题(6)】 Datastructures:SplPriorityQueue

    普通的队列是一种先进先出的数据结构,元素在队列尾追加,而从队列头取出.在优先队列中,元素被赋予优先级.当访问元素时,具有最高优先级的元素最先取出.优先队列具有最高级先出 (largest-in,fir ...

  7. 【SPL标准库专题(3)】 Classes

    我把SPL分为四个部分:Iterator,Classes,Datastructures,Function:而其中classes是就是做一些类的介绍(Iterator与Datastructures相关的 ...

  8. 【SPL标准库专题(10)】SPL Exceptions

    嵌套异常 了解SPL异常之前,我们先了解一下嵌套异常.嵌套异常顾名思义就是异常里面再嵌套异常,一个异常抛出,在catch到以后再抛出异常,这时可以通过Exception基类的getPrevious方法 ...

  9. 【SPL标准库专题(2)】 Iterator

    Iterator界面 本段内容来自阮一峰老师再加自己的部分注解 SPL规定,所有部署了Iterator界面的class,都可以用在foreach Loop中.Iterator界面中包含5个必须部署的方 ...

随机推荐

  1. 浏览器中F5和CTRL F5的行为区别及如何强制更新资源

    一.浏览器中F5和CTRL F5的行为区别 我们直接来看效果,下面是我打开qq网页,分别使用F5和CTRL F5,我们来看区别. F5: CTRL F5: 区别: 首先直观上的区别是CTRL F5明显 ...

  2. NSLog()输出函数集格式字符

    nslog()强大的功能这里就不多说了,笔者从c#转过来,难免会有些陌生.在c#中用format("{0}",xx}来进行占位,下面就来讲讲在oc中的格式字符; d:带符号的十进制 ...

  3. Spring总结 1.装配bean

    本随笔内容要点如下: 依赖注入 Spring装配bean的方式 条件化装配 一.依赖注入 我理解的依赖注入是这样的:所谓的依赖,就是对象所依赖的其他对象.Spring提供了一个bean容器,它负责创建 ...

  4. Java并发编程-synchronized指南

    在多线程程序中,同步修饰符用来控制对临界区代码的访问.其中一种方式是用synchronized关键字来保证代码的线程安全性.在Java中,synchronized修饰的代码块或方法不会被多个线程并发访 ...

  5. springmvc json 406

    spring 4.0 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="ht ...

  6. JVM学习记录-线程安全与锁优化(二)

    前言 高效并发是程序员们写代码时一直所追求的,HotSpot虚拟机开发团队也为此付出了很多努力,为了在线程之间更高效地共享数据,以及解决竞争问题,HotSpot开发团队做出了各种锁的优化技术常见的有: ...

  7. HTTPS知识小结

    HTTPS知识小结 背景1:TCP握手 internet上的两台机器A,B要建立起HTTP连接了,在这之前要先建立TCP连接,情景大概是这样子的: A:你好,我跟你建立一个TCP好吗? B:好啊. A ...

  8. Error creating bean with name 'tomcatEmbeddedServletContainerFactory'

    org.springframework.boot.autoconfigure.web.EmbeddedServletContainerAutoConfiguration$EmbeddedTomcato ...

  9. [转]解决Magento批量导入带图片的商品的问题

    本文转自:http://www.phpstudio.info/show-121-791-1.html 一般来说,Magento后台管理里的CSV批量导入,可以解决我们商品批量上传的大部分问题,我们只要 ...

  10. jQuery.Ajax()执行WCF Service的方法

    Insus.NET有在上一篇<ASP.NET MVC呼叫WCF Service的方法>http://www.cnblogs.com/insus/p/3720547.html 直接呼叫WCF ...