当前位置: 首页 > 后端技术 > PHP

SPL数据结构1-双向链表、栈、队列

时间:2023-03-29 23:55:19 PHP

在php中,spl扩展提供了一些常用的数据结构供我们使用。只是php中有万能数组,所以对数据结构的理解和相关数据结构的使用会比较少。下面整理一下spl中提供的一些数据结构和使用说明,让大家对相关的数据结构和基本用法有一定的了解。本文将介绍双向链表、栈和队列。下面是百度百科对双向链表的解释。双向链表也称为双向链表。它是一种链表。其中的每个数据节点都有两个指针,分别指向直接后继者和直接前驱者。因此,从双向链表中的任意一个节点开始,都可以方便地访问到它的前驱节点和后继节点。一般我们构造一个双向循环链表。在phpspl中,提供了SplDoublyLinkedList来实现双向链表。下面的代码列出了一些常用的函数$list=newSplDoublyLinkedList();$list->push('a');$list->push('b');$list->push('c');$list->push('d');echo"链表的长度:".count($list).PHP_EOL;$list->setIteratorMode(SplDoublyLinkedList::IT_MODE_FIFO);echo"FIFO:\n";for($list->rewind();$list->valid();$list->next()){echo$list->current()."\n";}$list->setIteratorMode(SplDoublyLinkedList::IT_MODE_LIFO);echo"LIFO:\n";for($list->rewind();$list->valid();$list->next()){echo$list->current()."\n";}//双向链表常用方法echo"链表头元素:".$列表->底部()。PHP_EOL;echo"链表的尾元素:".$列表->弹出()。PHP_EOL;$list->push("pushanelementattheendofthelinkedlist");//popanelementfromtheendoflinkedlistecho"poptheelementinthelinkedlist:".$list->pop().PHP_EOL;//在链表头部插入元素$list->unshift("first");//删除链表头部元素$list->shift();//当前节点元素为nullecho"当前节点元素:"。$列表->当前()。PHP_EOL;$list->rewind();//将当前指针重置为链表的末尾echo"Nodeelementafterreset:".$列表->当前()。PHP_EOL;//注意pre-next获取的值与当前linkList模式相关$list->setIteratorMode(SplDoublyLinkedList::IT_MODE_FIFO);$??list->prev();echo"当前节点元素:".$list->current().PHP_EOL;$list->next();echo"当前节点元素:".$list->current().PHP_EOL;栈(Stack)栈是一种常见的数据结构特性,只能用于在一端(称为栈顶)插入和删除数据。那就是我们常见的LIFO(后进先出)。spl中提供了SplStack类来实现栈。SplStack是基于双向链表实现的,继承自SplDoublyLinkedList类$obj=newSplStack();$obj->push(1);$obj->push('two');$obj->push(3);回声“流行:”。$obj->pop()。PHP_EOL;回声“流行:”。$obj->pop()。PHP_EOL;回声“流行:”。$obj->pop()。PHP_EOL;//继续弹出Error//echo"pop:".$obj->pop().PHP_EOL;$obj->push(111);$obj->push('222');$obj->push(333);$obj->rewind();while($obj->valid()){echo$obj->current(),"\n";$obj->next();}Queue(队列)队列应该是我们开发中使用最多的数据结构之一。我们熟悉的消息队列,往往都是基于队列来实现的。队列有时也称为线性列表。最大的特点是先进先出FIFO。spl中的SplQueue类就是实现队列的数据结构。底层也是基于双向链表实现的。$obj=newSplQueue();$obj->enqueue('a');$obj->enqueue('b');$obj->enqueue('c');//出队echo"Dequeue:".$obj->dequeue()。PHP_EOL;回声“出队:”。$obj->dequeue()。PHP_EOL;回声“出队:”。$obj->dequeue()。PHP_EOL;//当队列中有元素出队时会报错RuntimeException://echo"dequeue:".$obj->dequeue().PHP_EOL;下一篇:堆、最大堆、最小堆