您的位置:首页 > 其它

SPL学习笔记(2)---类的实现

2016-01-30 15:14 134 查看

一.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到top
echo "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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: