spl:Standard PHP Library 标准PHP类库
今天主要看一下spl的数据结构,有以下知识点要先说明一下:
1)bootom:最先添加到链表中的节点叫buttom(底部),也叫头部(head)
2)top:最后添加到链表中的节点叫top(顶部),也称尾部
3)链表指针:是一个当前关注节点的标识,可以指向任意节点
4)当前节点:链表指针指向的节点叫当前节点
spl常用数据结构:
一.链表结构
就像一个链条一样一环接一环,无论正向反向都与下个链环有关,像微博好友,a关注b,b同时也可以关注a
<?php
$object = new splDoublyLinkedList();
$obj->push(1); //把新节点添加到链条顶部(top)
$obj->push(2);
$obj->push(3);
$obj->push(4); //把新节点添加到链条底部(bottom)
$obj->rewind(); //rewind指针用于把节点指针指向bottom所在节点
echo '‘current:'’ . $obj->rewind(); //获取节点指针指向节点
$obj->next();
echo 'next:' . $obj->current(); //指向下一个节点的值,当下节点不存在,则返回空数据
$obj->prev(); //指向上一个节点
$obj->valid(); //如果当前节点是有效节点,则valid返回true,否则返回false
$obj->pop(); //把当前节点从链表中删除并返回,如果current正好指向pop位置,那么调用pop后会失效
$obj->current();
$obj->shift(); //把bottom链表位置的节点从链表删除并返回
$obj->unshift();
二.数据堆栈:原理---先进的后出
<?php
$stack = new SplStack();
$satck -> push('a');
$satck -> push('b');
$satck -> push('c');
echo 'bottom:'.$stack->bottom();
echo 'top:'.$stack->top();
//堆栈的offset=0是top所在位置,offset=1是top位置节点靠近bottom的相邻节点,以此类推
$stack -> offsetSet(0,'C');
//堆栈的rewind和双向链表的刚好相反,堆栈rewind使指针指向top所在位置,而双向链表指向bottom所在位置
$stack -> rewind();
//堆栈的next操作使指针指向bottom所在位置,而双向链表则指向top所在位置,next不会删除元素
$stack -> next();
$stack -> pop(); //删除堆栈top位置所在元素
三.队列:最先进入队列的数据最先出(排队)
<?php
$obj = new SplQueue();
$obj -> enqueue('a'); //存储方式和链表及堆栈相同,不过存储函数不同
$obj -> enqueue('b'); //获取bottom和top的节点也相同
$obj -> enqueue('c');
$obj -> offsetSet(0,'A');//队列里offset=0是指向bottom所在节点,offset=1指向top方向相邻节点
$obj -> rewind(); //队列里面的rewind使指针指向bottom所在位置的节点
$obj ->next(); //next使得当前指针指向top方向下一个节点
$obj -> dequeue();//dequeue从队列中提取bottom位置所在节点,并返回,同时删除此元素