PHP 双链表(SplDoublyLinkedList)简介和使用实例
author:一佰互联 2019-04-28   click:163

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

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