<转>PHP SPL标准库之数据结构双链表(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.     public mixed key  ( void )  
  15.     //移到上条记录  
  16.     public void prev  ( void )  
  17.     //移到下条记录  
  18.     public void next  ( void )  
  19.     //当前记录  
  20.     public mixed current  ( void )  
  21.     //将指针指向迭代开始处  
  22.     public void rewind  ( void )  
  23.     //检查双链表是否还有节点  
  24.     public bool valid  ( void )  
  25.   
  26.     //指定index处节点是否存在  
  27.     public bool offsetExists  ( mixed  $index  )  
  28.     //获取指定index处节点值  
  29.     public mixed offsetGet  ( mixed  $index  )  
  30.     //设置指定index处值  
  31.     public void offsetSet  ( mixed  $index  , mixed  $newval  )  
  32.     //删除指定index处节点  
  33.     public void offsetUnset  ( mixed  $index  )  
  34.   
  35.     //从双链表的尾部弹出元素  
  36.     public mixed pop  ( void )  
  37.     //添加元素到双链表的尾部  
  38.     public void push  ( mixed  $value  )  
  39.   
  40.     //序列化存储  
  41.     public string serialize  ( void )  
  42.     //反序列化  
  43.     public void unserialize  ( string $serialized  )  
  44.   
  45.     //设置迭代模式  
  46.     public void setIteratorMode  ( int $mode  )  
  47.     //获取迭代模式SplDoublyLinkedList::IT_MODE_LIFO  (Stack style) SplDoublyLinkedList::IT_MODE_FIFO  (Queue style)  
  48.     public int getIteratorMode  ( void )  
  49.   
  50.     //双链表的头部移除元素  
  51.     public mixed shift  ( void )  
  52.     //双链表的头部添加元素  
  53.     public void unshift  ( mixed  $value  )  
  54.   
  55. }  


使用起来也是简单:

    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.   
    24. print_r($a = $list->serialize());  
    25. //print_r($list->unserialize($a));  
    26.   
    27. $list->offsetSet(0,'new one');  
    28. $list->offsetUnset(0);  
    29. print_r(array(  
    30.     'offsetExists' => $list->offsetExists(4),  
    31.     'offsetGet' => $list->offsetGet(0),  
    32.   
    33. ));  
    34. print_r($list);

posted on 2015-09-24 12:54  hahahahahai12  阅读(293)  评论(0)    收藏  举报

导航