当前位置:首页 > PHP教程 > php高级应用 > 列表

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

发布:smiling 来源: PHP粉丝网  添加日期:2021-05-26 16:15:35 浏览: 评论:0 

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

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

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

SplDoublyLinkedList类摘要如下:

  1. SplDoublyLinkedList implements Iterator  , ArrayAccess  , Countable  { 
  2.    
  3.   public __construct ( void ) 
  4.   public void add ( mixed $index , mixed $newval ) 
  5.   //双链表的头部节点 
  6.   public mixed top ( void ) 
  7.   //双链表的尾部节点 
  8.   public mixed bottom ( void ) 
  9.   //双联表元素的个数 
  10.   public int count ( void ) 
  11.   //检测双链表是否为空 
  12.   public bool isEmpty ( void ) 
  13.    
  14.    
  15.   //当前节点索引 
  16.   public mixed key ( void ) 
  17.   //移到上条记录 
  18.   public void prev ( void ) 
  19.   //移到下条记录 
  20.   public void next ( void ) 
  21.   //当前记录 
  22.   public mixed current ( void ) 
  23.   //将指针指向迭代开始处 
  24.   public void rewind ( void ) 
  25.   //检查双链表是否还有节点 
  26.   public bool valid ( void ) 
  27.    
  28.   //指定index处节点是否存在 
  29.   public bool offsetExists ( mixed $index ) 
  30.   //获取指定index处节点值 
  31.   public mixed offsetGet ( mixed $index ) 
  32.   //设置指定index处值 
  33.   public void offsetSet ( mixed $index , mixed $newval ) 
  34.   //删除指定index处节点 
  35.   public void offsetUnset ( mixed $index ) 
  36.    
  37.   //从双链表的尾部弹出元素 
  38.   public mixed pop ( void ) 
  39.   //添加元素到双链表的尾部 
  40.   public void push ( mixed $value ) 
  41.    
  42.   //序列化存储 
  43.   public string serialize ( void ) 
  44.   //反序列化 
  45.   public void unserialize ( string $serialized ) 
  46.    
  47.   //设置迭代模式 
  48.   public void setIteratorMode ( int $mode ) 
  49.   //获取迭代模式SplDoublyLinkedList::IT_MODE_LIFO (Stack style) SplDoublyLinkedList::IT_MODE_FIFO (Queue style) 
  50.   public int getIteratorMode ( void ) 
  51.    
  52.   //双链表的头部移除元素 
  53.   public mixed shift ( void ) 
  54.   //双链表的头部添加元素 
  55.   public void unshift ( mixed $value ) 
  56.    

使用起来也是简单。

  1. $list = new SplDoublyLinkedList(); 
  2. $list->push('a'); 
  3. $list->push('b'); 
  4. $list->push('c'); 
  5.    
  6. $list->unshift('top'); 
  7. $list->shift(); 
  8.    
  9. print_r(array
  10.   'pop' => $list->pop(), 
  11.   'count' => $list->count(), 
  12.   'isEmpty' => $list->isEmpty(), 
  13.   'bottom' => $list->bottom(), 
  14.   'top' => $list->top() 
  15. )); 
  16.    
  17. $list->setIteratorMode(SplDoublyLinkedList::IT_MODE_FIFO); 
  18. print_r($list->getIteratorMode()); 
  19.    
  20. for($list->rewind(); $list->valid(); $list->next()) { 
  21.   echo $list->current().PHP_EOL; 
  22.    
  23. print_r($a = $list->serialize()); 
  24. //print_r($list->unserialize($a)); 
  25.    
  26. $list->offsetSet(0,'new one'); 
  27. $list->offsetUnset(0); 
  28. print_r(array
  29.   'offsetExists' => $list->offsetExists(4), 
  30.   'offsetGet' => $list->offsetGet(0), 
  31.    
  32. )); 
  33. print_r($list);

Tags: PHP双链表 SplDoublyLinkedList

分享到: