首页 > 开发 > PHP > 正文

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

2024-05-04 22:37:07
字体:
来源:转载
供稿:网友

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

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

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表