企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持知识库和私有化部署方案 广告
# SplQueue(队列) # [SplQueue](https://www.php.net/manual/zh/class.splqueue.php#class.splqueue) 重写与新增的方法 ``` <pre class="calibre10">``` __construct <span class="token3">(</span> void <span class="token3">)</span> dequeue <span class="token3">(</span> void <span class="token3">)</span> <span class="token3">:</span> mixed <span class="token">//将一个节点从队列里移除并返回</span> enqueue <span class="token3">(</span> mixed $value <span class="token3">)</span> <span class="token3">:</span> void <span class="token">//向队列添加元素(插入一个节点到队列里面的Top位置)</span> setIteratorMode <span class="token3">(</span> int $mode <span class="token3">)</span> <span class="token3">:</span> void ``` ``` > 其余继承与SplDoublyLinkedList ## **用法:** ``` <pre class="calibre17">``` $stack <span class="token1">=</span> <span class="token5">new</span> <span class="token4">SplStack</span><span class="token3">(</span><span class="token3">)</span><span class="token3">;</span><span class="token">//继承自SplDoublyLinkedList类</span> $stack<span class="token3">[</span><span class="token3">]</span> <span class="token1">=</span> <span class="token6">1</span><span class="token3">;</span><span class="token">//[0=>1]</span> $stack<span class="token3">[</span><span class="token3">]</span> <span class="token1">=</span> <span class="token6">2</span><span class="token3">;</span><span class="token">//[0=>1,1=>2]</span> $stack<span class="token3">[</span><span class="token3">]</span> <span class="token1">=</span> <span class="token6">3</span><span class="token3">;</span><span class="token">//[0=>1,1=>2,2=>3]</span> <span class="token">//$stack->add(4,5); //报错超出偏移量</span> $stack<span class="token1">-</span><span class="token1">></span><span class="token4">add</span><span class="token3">(</span><span class="token6">3</span><span class="token3">,</span><span class="token6">4</span><span class="token3">)</span><span class="token3">;</span> <span class="token">//添加一个元素到尾部</span> $stack<span class="token1">-</span><span class="token1">></span><span class="token4">push</span><span class="token3">(</span><span class="token2">"a"</span><span class="token3">)</span><span class="token3">;</span> $stack<span class="token1">-</span><span class="token1">></span><span class="token4">push</span><span class="token3">(</span><span class="token2">"b"</span><span class="token3">)</span><span class="token3">;</span> <span class="token">//[0=>1,1=>2,2=>3,3=>4,4=>'a',5=>'b']</span> <span class="token">//尾部弹出一个元素</span> echo $stack<span class="token1">-</span><span class="token1">></span><span class="token4">pop</span><span class="token3">(</span><span class="token3">)</span><span class="token3">;</span> echo $stack<span class="token1">-</span><span class="token1">></span><span class="token4">pop</span><span class="token3">(</span><span class="token3">)</span><span class="token3">;</span> <span class="token">//[0=>1,1=>2,2=>3,3=>4]</span> $stack<span class="token1">-</span><span class="token1">></span><span class="token4">offsetSet</span><span class="token3">(</span><span class="token6">0</span><span class="token3">,</span><span class="token2">'B'</span><span class="token3">)</span><span class="token3">;</span><span class="token">//等同$stack[0]='B';</span> <span class="token">//[0=>1,1=>2,2=>3,3=>'B']</span> <span class="token">//将指针指向迭代开始处 Iterator</span> <span class="token">//双向链表的rewind和堆栈的rewind相反,堆栈的rewind使得当前指针指向Top所在的位置,而双向链表调用之后指向bottom所在位置</span> $stack<span class="token1">-</span><span class="token1">></span><span class="token4">rewind</span><span class="token3">(</span><span class="token3">)</span><span class="token3">;</span> echo <span class="token2">'current:'</span><span class="token3">.</span>$stack<span class="token1">-</span><span class="token1">></span><span class="token4">current</span><span class="token3">(</span><span class="token3">)</span><span class="token3">;</span><span class="token">//current:B</span> $stack<span class="token1">-</span><span class="token1">></span><span class="token4">next</span><span class="token3">(</span><span class="token3">)</span><span class="token3">;</span><span class="token">//堆栈的next操作使指针指向靠近bottom位置的下一个节点,而双向链表是靠近top的下一个节点</span> echo <span class="token2">'current:'</span><span class="token3">.</span>$stack<span class="token1">-</span><span class="token1">></span><span class="token4">current</span><span class="token3">(</span><span class="token3">)</span><span class="token3">;</span><span class="token">//current:3</span> $stack<span class="token1">-</span><span class="token1">></span><span class="token4">rewind</span><span class="token3">(</span><span class="token3">)</span><span class="token3">;</span> <span class="token5">while</span><span class="token3">(</span>$stack<span class="token1">-</span><span class="token1">></span><span class="token4">valid</span><span class="token3">(</span><span class="token3">)</span><span class="token3">)</span><span class="token3">{</span> echo $stack<span class="token1">-</span><span class="token1">></span><span class="token4">current</span><span class="token3">(</span><span class="token3">)</span><span class="token3">,</span><span class="token2">"\n"</span><span class="token3">;</span> $stack<span class="token1">-</span><span class="token1">></span><span class="token4">next</span><span class="token3">(</span><span class="token3">)</span><span class="token3">;</span><span class="token">//B 3 2 1 </span> <span class="token3">}</span> <span class="token5">for</span> <span class="token3">(</span>$stack<span class="token1">-</span><span class="token1">></span><span class="token4">rewind</span><span class="token3">(</span><span class="token3">)</span><span class="token3">;</span> $stack<span class="token1">-</span><span class="token1">></span><span class="token4">valid</span><span class="token3">(</span><span class="token3">)</span><span class="token3">;</span> $stack<span class="token1">-</span><span class="token1">></span><span class="token4">next</span><span class="token3">(</span><span class="token3">)</span><span class="token3">)</span> <span class="token3">{</span> echo $stack<span class="token1">-</span><span class="token1">></span><span class="token4">current</span><span class="token3">(</span><span class="token3">)</span><span class="token3">;</span><span class="token">//B 3 2 1</span> <span class="token3">}</span> ``` ```