天天看点

php队列与堆栈的区别,在PHP中使用队列和堆栈

这篇文章的内容是受Vaidehi Joshi的“排队或不排队” 以及Base CS系列视频堆栈和队列的启发

在Vaidehi的帖子中,她解释了队列如何工作并显示了一些使队列入队和出队的“函数/方法”,这是一个简单直接的示例,向您展示了它在PHP中的工作方式(我假设您已经了解了CS视频)。

PHP带有一个称为的标准库SplQueue(Spl表示标准PHP库)SplQueue继承自SplDoublyLinkedList。因此,SplQueue支持方法push()和对象pop()。但是请注意,如果在对象上使用push()和pop()方法SplQueue,则其行为类似于堆栈而不是队列

Manu Manjunath (PHP官方文档的原始解释)

简短的长篇小说,SplDoublyLinkedList意味着同一个图书馆可同时为queue和使用stacks。

堆栈

如上所述,如果在对象上使用push()和pop(),SplQueue则行为将是堆栈而不是队列,请参见:$stack = new SplQueue();

$stack->push(1);

$stack->push(2);

$stack->push(3);

$stack->pop(); // remove the last one

print_r($stack);

请注意,弹出了3个而不是 1。

s列

方法使用SplQueue的队列是:enqueue()和dequeue(),请参阅:$queue = new SplQueue();

$queue->enqueue('A');

$queue->enqueue('B');

$queue->enqueue('C');

$queue->dequeue(); // remove the first one

print_r($q);

Queue和Stack辅助方法:$queue->enqueue('dev'); // or $stack->push('dev');

$queue->enqueue('.to'); // or $stack->push('.to');

$queue->count(); // (int) 2

$queue->isEmpty(); // false

$queue->valid(); // false because right now the pointer is in the last position

// move the cursor to the first position, if you run valid() again after this it will be true

$queue->rewind();

$queue->current(); // "dev", current() just work if you rewind() before call it

$queue->unshift(3); // add the value to the beginning

$queue->current(); // "dev", because we need to move the cursor back to the first position

$queue->rewind();

$queue->current(); // 3

$queue->add(2, 'random-text'); // Add/insert a new value at the specified index

print_r($queue); // Show only 3, "dev" and "to" because we don't rewind() yet.

$queue->rewind(); // move the cursor back to the first position

print_r($queue);

遍历队列和堆栈:$queue = new SplQueue();

$queue->enqueue('dev');

$queue->enqueue('.to');

$queue->unshift('https://');

$queue->rewind(); // always rewind the queue/stack, so PHP can start from the beginning.

while($queue->valid()){

echo $queue->current()."\n"; // Show the first one

$queue->next(); // move the cursor to the next element

}

您可以使用很多方法,但我无法在此处显示所有方法,您可以在官方文档中查看有关SplQueue

那么,您现在正在使用哪种编程语言?是否具有内置的队列和堆栈?如果是这样,我该如何使用?如果不是,您该怎么做?写一篇文章,向我们展示如何使用您喜欢的编程语言处理队列和堆栈!?