//SPL数据结构之堆栈
$stack = new SplStack();
//push操作向堆栈中放入一个节点到Top位置
$stack->push('a');
$stack->push('b');
$stack->push('c');
print_r($stack);
echo "Bottom:" . $stack->bottom() . "\n";
echo "Top:" . $stack->top() . "\n";
//堆栈的offset是Top所在的位置,offset=1是Top位置靠近Bottom位置的相邻节点,以此类推
$stack->offsetSet(0,'C');
print_r($stack);
//双向链表的rewind与堆栈的rewind相反,堆栈的rewind使得当前指针指向Top所在的位置,而双向链表调用之后指向Bottom所在的位置
$stack->rewind();
echo "current:" . $stack->current() . "\n";
//堆栈的next操作使指针指向靠近Bottom未知的下一个节点,而双向链表是靠近Top的下一个节点
$stack->next();
echo "current:" . $stack->current() . "\n";
//遍历堆栈
$stack->rewind();
while ($stack->valid()) {
echo $stack->key() . "=>" . $stack->current() . "\n";
$stack->next();
}
//删除堆栈数据
//pop操作从堆栈中提取出最后一个元素(Top位置),同时在堆栈中删除该节点
$pop = $stack->pop();
echo "Pop value:" . $pop . "\n";
print_r($stack);