您现在的位置: 万盛学电脑网 >> 程序编程 >> 网络编程 >> php编程 >> 正文

PHP 双链表(SplDoublyLinkedList)简介和使用实例

作者:佚名    责任编辑:admin    更新时间:2022-06-22

   这篇文章主要介绍了PHP 双链表(SplDoublyLinkedList)简介和使用实例的相关资料,需要的朋友可以参考下

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

  PHP SPL中的SplDoublyLinkedList类提供了对双链表的操作。

  SplDoublyLinkedList类摘要如下:

  ?

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 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 )   }

  使用起来也是简单

  ?

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 $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);