资讯专栏INFORMATION COLUMN

【SPL标准库专题(5)】Datastructures:SplDoublyLinkedList

luckyw / 531人阅读

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

简述

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

类摘要
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()."
";
}

for ($list->rewind(); $list->valid(); $list->next()) {
  echo $list->current()."
";
}

其他的方法手册看看名称都能理解,就不说明了:
http://php.net/manual/zh/clas...

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/31521.html

相关文章

  • SPL标准专题(6)】DatastructuresSplStack & SplQueu

    摘要:这两个类都是继承自,分别派生自的堆栈模式和队列模式所以放在一起来介绍堆栈类摘要方法重写了父类,固定为堆栈模式,然后此处只需要传或者。 这两个类都是继承自SplDoublyLinkedList,分别派生自SplDoublyLinkedList的堆栈模式和队列模式;所以放在一起来介绍; 堆栈SplStack showImg(https://segmentfault.com/img/remo...

    TigerChain 评论0 收藏0
  • SPL标准专题(9)】DatastructuresSplFixedArray

    摘要:主要是处理数组相关的主要功能,与普通不同的是,它是固定长度的,且以数字为键名的数组,优势就是比普通的数组处理更快。类摘要方法导入数组,返回对象把对象数组导出为真正的数组由于是定长数组,所以超过定长就会抛出异常。 SplFixedArray主要是处理数组相关的主要功能,与普通php array不同的是,它是固定长度的,且以数字为键名的数组,优势就是比普通的数组处理更快。 类摘要 SplF...

    lindroid 评论0 收藏0
  • SPL标准专题(10)】DatastructuresSplObjectStorage

    摘要:是用来存储一组对象的,特别是当你需要唯一标识对象的时候。类实现了四个接口。可实现统计迭代序列化数组式访问等功能。 PHP SPL SplObjectStorage是用来存储一组对象的,特别是当你需要唯一标识对象的时候。PHP SPL SplObjectStorage类实现了Countable,Iterator,Serializable,ArrayAccess四个接口。可实现统计、迭代、...

    ConardLi 评论0 收藏0
  • SPL标准专题(7)】DatastructuresSplPriorityQueue

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

    mindwind 评论0 收藏0
  • SPL标准专题(8)】DatastructuresSplHeap & SplMaxHe

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

    chadLi 评论0 收藏0

发表评论

0条评论

luckyw

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<