php标准库spl之链表,堆栈,队列
双向链表类:SplDoublyLinkedList
1. 增删节点的方法
push:向链表的尾部插入一个节点
pop:获取链表中的尾部节点,并且从链表中删除这个节点;操作不改变当前指针的位置
unshift:向链表的头部插入一个节点
shift:删除一个链表头部节点
2. 指针操作方法
rewind:使链表的当前指针指向链表的头部(即bottom)
current:获得链表当前节点指针指向的元素,必须在调用之前先调用rewind。当指向的节点被删除之后,会指向一个空节点
next:让链表当前的指针指向下一个节点,curent的返回值随之改变
bottom:获得链表头部元素,当前指针位置不变
top:获得链表尾部元素,当前指针位置不变
3.其他方法(用法见堆栈类)
valid:检查链表中是否还存在节点,循环输出时,可以用作判断
count:统计链表中节点的个数
key:返回当前节点的键值
offsetSet :设置指定键的值,注意:如键为0,在链表中0指向头部即bottom,在堆栈中指向栈顶。
offunset:注销指定键的值
<code><span></span>php <span>/** * Created by 马廷广 * User: 马廷广 * Date: 2015/8/5 * Time: 10:52 */</span><span>$obj</span><span>=</span><span>new</span> SplDoublyLinkedList(); <span>$obj</span><span>-></span>push(<span>'b'</span>); <span>$obj</span><span>-></span>push(<span>'c'</span>); <span>$obj</span><span>-></span>unshift(<span>'a'</span>); var_dump(<span>$obj</span>); <span>/* array(3) { [0]=> string(1) "a" [1]=> string(1) "b" [2]=> string(1) "c" } ) */</span><span>$obj</span><span>-></span>rewind(); var_dump(<span>$obj</span><span>-></span>current());<span>//string(1) "a"</span><span>$obj</span><span>-></span>next(); var_dump(<span>$obj</span><span>-></span>current());<span>//string(1) "a"</span> var_dump(<span>$obj</span><span>-></span>bottom());<span>//string(1) "a"</span> var_dump(<span>$obj</span><span>-></span>top());<span>//string(1) "c"</span> var_dump(<span>$obj</span><span>-></span>pop());<span>//string(1) "c"</span> var_dump(<span>$obj</span>); <span>/* * array(2) { [0]=> string(1) "a" [1]=> string(1) "b" } */</span> var_dump(<span>$obj</span><span>-></span>shift());<span>//string(1) "a"</span> var_dump(<span>$obj</span>); <span>/* * array(1) { [0]=> string(1) "b" } */</span></code>
堆栈类:继承自SplDoublyLinkedList类的SplStack类
原理:堆栈类的底层是由栈实现的,栈是一种先进后出的数据结构,所以SplStack类的一些继承自SplDoublyLinkedList类的方法有一些理解上的不同,如rewind方法,spl使用rewind方法后指针将指向图中的栈顶,push和pop操作的是栈顶元素,unshift和shift操作的是栈底元素
<code><span></span>php <span>/** * Created by 马廷广 * User: 马廷广 * Date: 2015/8/5 * Time: 11:47 */</span><span>$stack</span><span>=</span><span>new</span> SplStack(); <span>$stack</span><span>-></span>push(<span>'a'</span>); <span>$stack</span><span>-></span>push(<span>'b'</span>); <span>$stack</span><span>-></span>push(<span>'c'</span>); echo <span>$stack</span><span>-></span>count();<span>//3</span><span>$stack</span><span>-></span>rewind(); echo <span>$stack</span><span>-></span>current();<span>//c</span><span>$stack</span><span>-></span>offsetSet(<span>0</span>,<span>'d'</span>);<span>//offsetSet中0指向的是图中的栈顶,由栈顶向下递增1,2,3,4</span><span>while</span>(<span>$stack</span><span>-></span>valid()){ echo <span>$stack</span><span>-></span>key()<span>.</span><span>"->"</span><span>.</span><span>$stack</span><span>-></span>current(); <span>$stack</span><span>-></span>next(); } <span>/*2->d 1->b 0->a */</span></code>
队列类:继承自SplDoublyLinkedList类的SplQueue类
enqueue:进入队列
dequeue:退出队列
队列类的rewind,offsetSet等方法类似于链表
<code><?php /** * Created <span>by 马廷广 * <span>User</span>: 马廷广 * <span>Date</span>: <span>2015</span>/<span>8</span>/<span>5</span> * <span>Time</span>: <span>12</span>:<span>36</span> */ $obj = <span>new</span> SplQueue(); $obj->enqueue(<span>'a'</span>); $obj->enqueue(<span>'b'</span>); $obj->enqueue(<span>'c'</span>); var_dump($obj); /* [<span>0</span>]<span>=></span> string(<span>1</span>) <span>"a"</span> [<span>1</span>]<span>=></span> string(<span>1</span>) <span>"b"</span> [<span>2</span>]<span>=></span> string(<span>1</span>) <span>"c"</span> } */ $obj->unshift(<span>"d"</span>); $obj->push(<span>'e'</span>); var_dump($obj); /* * array(<span>5</span>) { [<span>0</span>]<span>=></span> string(<span>1</span>) <span>"d"</span> [<span>1</span>]<span>=></span> string(<span>1</span>) <span>"a"</span> [<span>2</span>]<span>=></span> string(<span>1</span>) <span>"b"</span> [<span>3</span>]<span>=></span> string(<span>1</span>) <span>"c"</span> [<span>4</span>]<span>=></span> string(<span>1</span>) <span>"e"</span> } */ $obj->rewind(); echo $obj->current();<span>//</span>d $obj->offsetSet(<span>0</span>,<span>'h'</span>); var_dump($obj); /* * array(<span>5</span>) { [<span>0</span>]<span>=></span> string(<span>1</span>) <span>"h"</span> [<span>1</span>]<span>=></span> string(<span>1</span>) <span>"a"</span> [<span>2</span>]<span>=></span> string(<span>1</span>) <span>"b"</span> [<span>3</span>]<span>=></span> string(<span>1</span>) <span>"c"</span> [<span>4</span>]<span>=></span> string(<span>1</span>) <span>"e"</span> } */</code>
版权声明:本文为博主原创文章,未经博主允许不得转载。
以上就介绍了php标准库spl之链表,堆栈,队列,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

许多用户在选择智能手表的时候都会选择的华为的品牌,其中华为GT3pro和GT4都是非常热门的选择,不少用户都很好奇华为GT3pro和GT4有什么区别,下面就就给大家介绍一下二者。华为GT3pro和GT4有什么区别一、外观GT4:46mm和41mm,材质是玻璃表镜+不锈钢机身+高分纤维后壳。GT3pro:46.6mm和42.9mm,材质是蓝宝石玻璃表镜+钛金属机身/陶瓷机身+陶瓷后壳二、健康GT4:采用最新的华为Truseen5.5+算法,结果会更加的精准。GT3pro:多了ECG心电图和血管及安

使用Java的String.valueOf()函数将基本数据类型转换为字符串在Java开发中,当我们需要将基本数据类型转换为字符串时,一种常见的方法是使用String类的valueOf()函数。这个函数可以接受基本数据类型的参数,并返回对应的字符串表示。在本文中,我们将探讨如何使用String.valueOf()函数进行基本数据类型转换,并提供一些代码示例来

char数组转string的方法:可以通过赋值来实现,使用{char a[]=" abc d\0efg ";string s=a;}语法,让char数组对string直接赋值,执行代码即可完成转换。

dump文件通常是指一种二进制文件,也被称为转储文件或核心转储文件。这种文件是计算机系统在遇到严重错误或异常情况时生成的,用于存储系统或应用程序的状态、堆栈、寄存器、内存映像、日志等信息。

为什么截图工具在Windows11上不起作用了解问题的根本原因有助于找到正确的解决方案。以下是截图工具可能无法正常工作的主要原因:对焦助手已打开:这可以防止截图工具打开。应用程序损坏:如果截图工具在启动时崩溃,则可能已损坏。过时的图形驱动程序:不兼容的驱动程序可能会干扰截图工具。来自其他应用程序的干扰:其他正在运行的应用程序可能与截图工具冲突。证书已过期:升级过程中的错误可能会导致此issu简单的解决方案这些适合大多数用户,不需要任何特殊的技术知识。1.更新窗口和Microsoft应用商店应用程

使用Java的String.replace()函数替换字符串中的字符(串)在Java中,字符串是不可变的对象,这意味着一旦创建了一个字符串对象,就无法修改它的值。但是,你可能会遇到需要替换字符串中的某些字符或者字符串的情况。这时候,我们可以使用Java的String类中的replace()方法来实现字符串的替换。String类的replace()方法有两种重

大家好,今天给大家分享java基础知识之String。String类的重要性就不必说了,可以说是我们后端开发用的最多的类,所以,很有必要好好来聊聊它。

OPStack是由Optimism网络背后的开发团体OptimismCollective公布的一个开源区块链框架。它对于Ethereum和Optimism社区都是一个重要的工具。OPStack的主要目标是加强Optimism网络,提供关键的软件工具给OptimismMainnet,以及即将推出的OptimismSuperchain和其治理模型。通过提供一个面向开发者的环境,OPStack的核心思想是促进Ethereum领域的增长和创新。它为前沿发展铺平了道路,使区块链的创建更加简单。OPStac
