一.SPL中的双向链表—SplDoublyLinkedList()

双向链表的操作总结:

1.当前节点的操作: 
rewind() 指向bottom 
current() 当前节点 
next() 下一个节点 
prev() 上一个节点。

2.增加节点的操作: 
push()会插入到top 
unshift()会插入到bottom。

3.删除节点的操作: 
pop() 会删除节点中的top元素、 
shift() 会删除节点中的bottom元素

4.定位操作: 
bottom()、top()

5.特定节点的操作: 
offsetExsits()、offsetGet()、offsetSet()、offsetUnset()

<?php$obj=new SplDoublyLinkedList();$obj->push(1);$obj->push(2);$obj->push(3);$obj->unshift(10);//在bottom添加$obj->shift();    //在bottom删除// $obj->pop();$obj->rewind();//在调用current等操作前需要调用rewind()$obj->next();  //从bottom到topecho "current:".$obj->current(); //current:2$obj->prev();echo "current:".$obj->current(); //current:1$obj->prev();echo "current:".$obj->current(); //current:(指向空节点)

二.SPL中的堆栈—SplStack()

这里写图片描述
具有先进后出特性的成为堆栈。SplStack继承自SplDoublyLinkedList类、具有父类的一切方法。

注意点:

1.offset 中,0为top所在的节点。(offset总是最先出来的节点) 
2.current() 在双向链表中指向bottom位置,在堆栈指向top位置。 
3.next()在双向链表由bottom()指向top(),在堆栈中由top()指向bottom() 
4.pop()从top删除。同双向链表。

<?php $stack = new SplStack();$stack->push("A");$stack->push("B");$stack->offsetSet(0, "C");//B的值设为C//遍历堆栈$stack->rewind();while ($stack->valid()){    echo $stack->key()."=>".$stack->current()."<br>";    $stack->next();
}//1=>c 0=>A$stack->pop();
print_r($stack);//SplStack Object ( [flags:SplDoublyLinkedList:private] => 6 [dllist:SplDoublyLinkedList:private] => Array ( [0] => A ) )

三.SPL中的队列—SplQueue()

队列和堆栈正好相反,最先进入队列的元素会先出队列。

类比于排队打饭,排到最前面的人总是最先能够打到饭。

继承自SplDoublyLinkedList()

进入队列:enqueue()进入队列 dequeue()退出队列

注意点:

1.offset 中,0为bottom所在的节点。(offset总是最先出来的节点) 
2.current() 在双向链表中指向bottom位置,在队列指向bottom位置。 
3.next()在双向链表由bottom()指向top(),在队列由bottom()指向top()。 
4.dequeue()删除bottom()节点。

<?php $queue=new SplQueue();$queue->enqueue(1);$queue->enqueue(2);$queue->enqueue(3);$queue->dequeue();//1会退出队列$queue->offsetSet(0, "b");$queue->rewind();echo "current:".$queue->current();//b