PHP标准库(SPL)- SplDoublyLinkedList类(双向链表)

class SplDoublyLinkedList implements Iterator, Traversable, Countable, ArrayAccess {
        const IT_MODE_LIFO = 2;
        const IT_MODE_FIFO = 0;
        const IT_MODE_DELETE = 1;
        const IT_MODE_KEEP = 0;

        /**         * Add/insert a new value at the specified index
         * @param mixed $index The index where the new value is to be inserted.
         * @param mixed $newval The new value for the index.
         * @link http://php.net/spldoublylinkedlist.add
         * @return void
         * @since 5.5.0
         */
        public function add($index, $newval) {}

        /**
         * Pops a node from the end of the doubly linked list
         * @link http://php.net/manual/en/spldoublylinkedlist.pop.php
         * @return mixed The value of the popped node.
         * @since 5.3.0
         */
        public function pop () {}

        /**
         * Shifts a node from the beginning of the doubly linked list
         * @link http://php.net/manual/en/spldoublylinkedlist.shift.php
         * @return mixed The value of the shifted node.
         * @since 5.3.0
         */
        public function shift () {}

        /**
         * Pushes an element at the end of the doubly linked list
         * @link http://php.net/manual/en/spldoublylinkedlist.push.php
         * @param mixed $value <p>
         * The value to push.
         * </p>
         * @return void
         * @since 5.3.0
         */
        public function push ($value) {}

        /**
         * Prepends the doubly linked list with an element
         * @link http://php.net/manual/en/spldoublylinkedlist.unshift.php
         * @param mixed $value <p>
         * The value to unshift.
         * </p>
         * @return void
         * @since 5.3.0
         */
        public function unshift ($value) {}

        /**
         * Peeks at the node from the end of the doubly linked list
         * @link http://php.net/manual/en/spldoublylinkedlist.top.php
         * @return mixed The value of the last node.
         * @since 5.3.0
         */
        public function top () {}

        /**
         * Peeks at the node from the beginning of the doubly linked list
         * @link http://php.net/manual/en/spldoublylinkedlist.bottom.php
         * @return mixed The value of the first node.
         * @since 5.3.0
         */
        public function bottom () {}

        /**
         * Counts the number of elements in the doubly linked list.
         * @link http://php.net/manual/en/spldoublylinkedlist.count.php
         * @return int the number of elements in the doubly linked list.
         * @since 5.3.0
         */
        public function count () {}

        /**
         * Checks whether the doubly linked list is empty.
         * @link http://php.net/manual/en/spldoublylinkedlist.isempty.php
         * @return bool whether the doubly linked list is empty.
         * @since 5.3.0
         */
        public function isEmpty () {}

        /**
         * Sets the mode of iteration
         * @link http://php.net/manual/en/spldoublylinkedlist.setiteratormode.php
         * @param int $mode <p>
         * There are two orthogonal sets of modes that can be set:
         * </p>
         * The direction of the iteration (either one or the other):
     * <b>SplDoublyLinkedList::IT_MODE_LIFO</b> (Stack style)
         * @return void
         * @since 5.3.0
         */
        public function setIteratorMode ($mode) {}

        /**
         * Returns the mode of iteration
         * @link http://php.net/manual/en/spldoublylinkedlist.getiteratormode.php
         * @return int the different modes and flags that affect the iteration.
         * @since 5.3.0
         */
        public function getIteratorMode () {}

        /**
         * Returns whether the requested $index exists
         * @link http://php.net/manual/en/spldoublylinkedlist.offsetexists.php
         * @param mixed $index <p>
         * The index being checked.
         * </p>
     * @return bool true if the requested <i>index</i> exists, otherwise false
         * @since 5.3.0
         */
        public function offsetExists ($index) {}

        /**
         * Returns the value at the specified $index
         * @link http://php.net/manual/en/spldoublylinkedlist.offsetget.php
         * @param mixed $index <p>
         * The index with the value.
         * </p>
     * @return mixed The value at the specified <i>index</i>.
         * @since 5.3.0
         */
        public function offsetGet ($index) {}

        /**
         * Sets the value at the specified $index to $newval
         * @link http://php.net/manual/en/spldoublylinkedlist.offsetset.php
         * @param mixed $index <p>
         * The index being set.
         * </p>
         * @param mixed $newval <p>
     * The new value for the <i>index</i>.
         * </p>
         * @return void
         * @since 5.3.0
         */
        public function offsetSet ($index, $newval) {}

        /**
         * Unsets the value at the specified $index
         * @link http://php.net/manual/en/spldoublylinkedlist.offsetunset.php
         * @param mixed $index <p>
         * The index being unset.
         * </p>
         * @return void
         * @since 5.3.0
         */
        public function offsetUnset ($index) {}

        /**
         * Rewind iterator back to the start
         * @link http://php.net/manual/en/spldoublylinkedlist.rewind.php
         * @return void
         * @since 5.3.0
         */
        public function rewind () {}

        /**
         * Return current array entry
         * @link http://php.net/manual/en/spldoublylinkedlist.current.php
         * @return mixed The current node value.
         * @since 5.3.0
         */
        public function current () {}

        /**
         * Return current node index
         * @link http://php.net/manual/en/spldoublylinkedlist.key.php
         * @return mixed The current node index.
         * @since 5.3.0
         */
        public function key () {}

        /**
         * Move to next entry
         * @link http://php.net/manual/en/spldoublylinkedlist.next.php
         * @return void
         * @since 5.3.0
         */
        public function next () {}

        /**
         * Move to previous entry
         * @link http://php.net/manual/en/spldoublylinkedlist.prev.php
         * @return void
         * @since 5.3.0
         */
        public function prev () {}

        /**
         * Check whether the doubly linked list contains more nodes  当前指针处元素是否有效
         * @link http://php.net/manual/en/spldoublylinkedlist.valid.php
         * @return bool true if the doubly linked list contains any more nodes, false otherwise.
         * @since 5.3.0
         */
        public function valid () {}

        /**
         * Unserializes the storage
         * @link http://php.net/manual/ru/spldoublylinkedlist.serialize.php
         * @param string $serialized The serialized string.
         * @return void
         * @since 5.4.0
         */
         public function unserialize($serialized) {}

         /**
         * Serializes the storage
         * @link http://php.net/manual/ru/spldoublylinkedlist.unserialize.php
         * @return string The serialized string.
         * @since 5.4.0
         */
         public function  serialize () {}

}

用例

<?php
header("Content-type: text/html; charset=gb2312");
$doubly=new SplDoublyLinkedList();
$doubly->push(‘a‘);
$doubly->push(‘b‘);
$doubly->push(‘c‘);
$doubly->push(‘d‘);
$doubly->add(1,‘e‘);

echo ‘Original:‘."\n";
var_dump($doubly);

echo ‘FIFO|KEEP:‘."\n";
$doubly->setIteratorMode(SplDoublyLinkedList::IT_MODE_FIFO | SplDoublyLinkedList::IT_MODE_KEEP);
$doubly->rewind();
foreach($doubly as $key=>$value)
{
    echo $key.‘ ‘.$value."\n";
}

echo ‘LIFO|KEEP:‘."\n";
$doubly->setIteratorMode(SplDoublyLinkedList::IT_MODE_LIFO | SplDoublyLinkedList::IT_MODE_KEEP);
$doubly->rewind();
foreach($doubly as $key=>$value)
{
    echo $key.‘ ‘.$value."\n";
}

echo ‘LIFO|DELETE:‘."\n";
$doubly->setIteratorMode(SplDoublyLinkedList::IT_MODE_LIFO | SplDoublyLinkedList::IT_MODE_DELETE);
$doubly->rewind();
foreach($doubly as $key=>$value)
{
    if($key == 1) break;
    echo $key.‘ ‘.$value."\n";
}
echo ‘List after Delete‘."\n";
var_dump($doubly);
?>
时间: 2024-12-18 00:53:54

PHP标准库(SPL)- SplDoublyLinkedList类(双向链表)的相关文章

PHP 标准库 SPL 之数据结构栈(SplStack)简单实践

PHP 5.3.0 版本及以上的堆栈描述可以使用标准库 SPL 中的 SplStack class,SplStack 类继承双链表 ( SplDoublyLinkedList ) 实现栈. 代码: 1 <?php 2 header("Content-type:text/html; charset=utf-8"); 3 4 $stack = new SplStack(); 5 6 //LIFO 7 echo 'stack push',PHP_EOL; 8 9 //入栈 10 $st

使用php标准库spl在实现观察者模式

上次使用了纯php实现了一个观察者模式(php观察者模式), 现在使用php标准库spl在次实现观察者模式,好处是:随意的生成您想使用的观察者! <?php /** * Created by PhpStorm. * User: evolution * Date: 14-12-27 * Time: 下午5:50 */ class Login implements SplSubject { private $storage; public $status; public $ip; const LOG

PHP标准库 SPL

PHP SPL笔记 这几天,我在学习PHP语言中的SPL. 这个东西应该属于PHP中的高级内容,看上去很复杂,但是非常有用,所以我做了长篇笔记.不然记不住,以后要用的时候,还是要从头学起. 由于这是供自己参考的笔记,不是教程,所以写得比较简单,没有多解释.但是我想,如果你是一个熟练的PHP5程序员,应该足以看懂下面的材料,而且会发现它很有用.现在除此之外,网上根本没有任何深入的SPL中文介绍. ================ PHP SPL笔记 目录 第一部分 简介 1. 什么是SPL? 2.

【夯实PHP基础】PHP标准库 SPL

PHP SPL笔记 这几天,我在学习PHP语言中的SPL. 这个东西应该属于PHP中的高级内容,看上去很复杂,但是非常有用,所以我做了长篇笔记.不然记不住,以后要用的时候,还是要从头学起. 由于这是供自己参考的笔记,不是教程,所以写得比较简单,没有多解释.但是我想,如果你是一个熟练的PHP5程序员,应该足以看懂下面的材料,而且会发现它很有用.现在除此之外,网上根本没有任何深入的SPL中文介绍. ================ PHP SPL笔记 目录 第一部分 简介 1. 什么是SPL? 2.

基于标准库的string类实现简单的字符串替换

感觉基本功还是不扎实,虽然能做些程序但是现在看来我还是个初学者(primer),试着完成习题结果还得修修改改. 废话不多说,实现功能很简单,<C++ Primer>9.5.2节习题. // 将s中所有oldVal替换成newVal void replace(string& s, const string& oldVal, const string& newVal); 对字符串进行替换,实际上是先找到字符串s中的匹配部分,将匹配部分(oldVal)删除,然后插入要替换的字

python StringIO标准库基础学习

#标准库:StringIO提供类文件API文本缓冲区#作用:可以处理内存中的文本,有2种不同的实现:cStringIP版本用c编写提高速度,StringIO用python来提供可移植性,与其他字符串连接相比,cStringIO构造大字符串提供了更好的性能#示例try:    from cStringIO import StringIOexcept:    from  StringIO import StringIO#写入缓冲区out=StringIO()out.write('buffer.')p

C++ Primer 第四版读书笔记(二)之标准库类型

C++定义了一个内容丰富的抽象数据类型标准库,其中最重要的标准库类型是string和vector,它们分别定义了大小可变的字符串和集合.string和vector往往将迭代器用作配套类型,用于访问string中的字符,或者vector中的元素. 另一种标准库类型为bitset,提供了一种抽象方法来操作位的集合. string类型支持长度可变的字符串,vector用于保存一组指定类型的对象. bitset类标准库类型提供了更方便和合理有效的语言级的抽象设施.通过这个类可以把某个值当作位的集合来处理

C++ 标准库之typeid

本文只讲述typeid这个操作符,呃  ,它确实是一个操作符,类似于 sizeof 操作符. 在将该操作符之前,不得不提的是RTTI(Run-Time Type Identification,运行时类型识别),其实就是说 在运行期得到对象的实际的类型.这立刻使我们想到了"可以通过基类的指针和引用可以指向实际的派生类型". 啊哦,答对了,这就是typeid这个强大操作符所做的事. 既然提到了typeid,那么该操作符的返回类型便不得不提,该操作符的返回类型是type_info的标准库类型

Java、Intetnet与标准库

1.8 C++标准库 C++程序由类(class)和函数(function)组成.可以用多个小的软件模块构成C++程序,但大多数C++程序员会利用C++标准库中已有的类和函数来编程.这样,C++“世界”中实际要学习两方面的知识,第一是学习C++语言本身,第二是学习如何利用C++标准库中现有的类和函数(本书将介绍许多类和函数). Plauger(见参考文献P192)的著作是程序员必读的.可以帮助程序员深入了解C++中包括的ANSI C语言库函数,了解如何实现这些库函数,还可以了解如何用库函数编写可

Part12 异常处理 12.3标准库程序异常处理

标准异常类的继承关系 C++标准库各种异常类所代表的异常 标准异常类的基础 exception:标准程序库异常类的公共基类 logic_error表示可以在程序中被预先检测到的异常 如果小心地编写程序,这类异常能够避免 runtime_error表示难以被预先检测的异常 //例12-3 三角形面积计算 //编写一个计算三角形面积的函数,函数的参数为三角形三边边长a.b.c,可以用Heron公式计算: #include<iostream> #include<cmath> #inclu