SPL数据结构之堆栈SplStack,最后进入到堆栈里面的元素,最先在堆栈里取出,First In Last Out(FILO)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<?php
$stack = new SplStack();
// push操作向堆栈里面放入一个节点到top位置
$stack->push('a');
$stack->push('b');
$stack->push('c');
print_r($stack);
echo 'Bottom:' . $stack->bottom() . "\r\n";
echo 'Top:' . $stack->top() . "\r\n";
// 堆栈的offset=0是Top所在的位置,offset=1是top位置节点靠近Bottom位置的相邻节点,
// 以此类推。
$stack->offsetSet(0, 'C');
print_r($stack);
// 双向链表的rewind和堆栈的rewind相反,
// 堆栈的rewind使得当前指针指向Top所在的位置,而双向链表调用之后指向Bottom所在位置。
$stack->rewind();
echo 'Current:' . $stack->current() . "\r\n";
// 堆栈的next操作使指针指向靠近Bottom位置的下一个节点,
// 而双向链表是靠近Top的下一个节点。
// next操作不会删除元素
$stack->next();
echo 'Current:' . $stack->current() . "\r\n";
// 遍历堆栈
$stack->rewind();
while ($stack->valid()) {
echo $stack->key() . '=>' . $stack->current() . "\r\n";
$stack->next();
}
// 删除堆栈
// pop操作从堆栈里面提取出最后一个元素(top位置),同时在堆栈里面删除该节点。
$popObj = $stack->pop();
echo 'Poped object:' . $popObj . "\r\n";
print_r($stack);