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

5年以前  |  阅读数:254 次  |  编程语言:PHP 

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

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);
 相关文章:
PHP分页显示制作详细讲解
SSH 登录失败:Host key verification failed
获取IMSI
将二进制数据转为16进制以便显示
获取IMEI
文件下载
贪吃蛇
双位运算符
PHP自定义函数获取搜索引擎来源关键字的方法
Java生成UUID
发送邮件
年的日历图
提取后缀名
在Zeus Web Server中安装PHP语言支持
让你成为最历害的git提交人
Yii2汉字转拼音类的实例代码
再谈PHP中单双引号的区别详解
指定应用ID以获取对应的应用名称
Python 2与Python 3版本和编码的对比
php封装的page分页类完整实例