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

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