作为程序员一定要保持良好的睡眠,才能好编程

php-SplStack栈先进后出

发布时间:2020-05-17




//堆栈,先进后出
$stack = new SplStack();//继承自SplDoublyLinkedList类

$stack[] = 1;//[0=>1]
$stack[] = 2;//[0=>1,1=>2]
$stack[] = 3;//[0=>1,1=>2,2=>3]
//$stack->add(4,5);  //报错超出偏移量
$stack->add(3,4);

//添加一个元素到尾部
$stack->push("a");
$stack->push("b");
//[0=>1,1=>2,2=>3,3=>4,4=>'a',5=>'b']


//尾部弹出一个元素
echo $stack->pop();
echo $stack->pop();
//[0=>1,1=>2,2=>3,3=>4]

$stack->offsetSet(0,'B');//等同$stack[0]='B';
//[0=>1,1=>2,2=>3,3=>'B']

//将指针指向迭代开始处 Iterator
//双向链表的rewind和堆栈的rewind相反,堆栈的rewind使得当前指针指向Top所在的位置,而双向链表调用之后指向bottom所在位置
$stack->rewind();
echo 'current:'.$stack->current();//current:B
$stack->next();//堆栈的next操作使指针指向靠近bottom位置的下一个节点,而双向链表是靠近top的下一个节点
echo 'current:'.$stack->current();//current:3

$stack->rewind();
while($stack->valid()){
    echo $stack->current(),"\n";
    $stack->next();//B 3 2 1 
}

for ($stack->rewind(); $stack->valid(); $stack->next()) {
     echo $stack->current();//B 3 2 1
}