队列
$queue = new SplQueue();
$queue->push($data);
$queue->enqueue($data);
$queue->shift();
$queue->dequeue();
$queue->pop();
$queue->unshift($data);
$n = count($queue);
栈
$stack = new SplStack();
$stack->push($data);$queue->unshift($data);
$stack->pop();
$stack->top();
$stack->bottom();
$stack->count();
$stack->rewind();
while($stack->valid()){
echo $stack->key()."=>".$stack->current()."</br>";
$stack->next();
}
$pop = $stack->pop();
echo $pop;
双向链表
$obj = new SplDoublyLinkedList();
$obj->push(1);
$obj->push(2);
$obj->push(3);
$obj->unshift(10);
$obj->rewind();
$obj->next();
$obj->prev();
echo $obj->current();
if($obj->current())
{
echo "y";
}else{
echo "n";
}
if($obj->valid()){
}
$obj->pop();
print_r($obj);
堆:SplHeap
abstract SplHeap implements Iterator , Countable {
public __construct()
abstract protected compare(mixed $value1, mixed $value2): int
public count(): int
public current(): mixed
public extract(): mixed
public insert(mixed $value): void
public isCorrupted(): bool
public isEmpty(): bool
public key(): mixed
public next(): void
public recoverFromCorruption(): void
public rewind(): void
public top(): mixed
public valid(): bool
}
$heap = new SplMinHeap();
$heap->insert(22);
$heap->insert(2);
$heap->insert(222);
foreach( $heap as $number ) {
echo $number;
}
优先级队列:【默认是最大堆】 堆特效: 这里需要注意并理解:SplPriorityQueue是以堆数据结构来实现的,当我们出队时会拿出堆顶的元素,此时堆的特性被破坏,堆会进行相应的调整至稳定态(MaxHeap or MinHeap),即会将最后一个元素替换到堆顶,然后进行稳定态验证,不符合堆特性则继续调整,或者我们就得到了一个稳定态的堆,所以当优先级相同,出队顺序并不会按照入队顺序。 文档:https://www.php.net/manual/zh/class.splpriorityqueue.php
$splPriorityQueue = new \SplPriorityQueue();
$splPriorityQueue->insert("task1", 1);
$splPriorityQueue->insert("task2", 1);
$splPriorityQueue->insert("task3", 1);
$splPriorityQueue->insert("task4", 1);
$splPriorityQueue->insert("task5", 1);
echo $splPriorityQueue->extract() . PHP_EOL;
echo $splPriorityQueue->extract() . PHP_EOL;
echo $splPriorityQueue->extract() . PHP_EOL;
echo $splPriorityQueue->extract() . PHP_EOL;
echo $splPriorityQueue->extract() . PHP_EOL;
task1
task5
task4
task3
task2
SplFixedArray 定长数组 提供了数组的主要功能,和普通数组相比主要区别在于 SplFixedArray 需要手动调节大小,并且只允许范围内的整数作为索引。其优点是它使用的内存比标准数组少。
$array = new SplFixedArray(5);
$array[1] = 2;
$array[4] = "foo";
var_dump($array[0]);
var_dump($array[1]);
var_dump($array["4"]);
$array->setSize(10);
|