@a5635268
2016-02-22T01:46:32.000000Z
字数 2091
阅读 1336
SPL
双链表是一种重要的线性存储结构,对于双链表中的每个节点,不仅仅存储自己的信息,还要保存前驱和后继节点的地址。

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->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
