03
2017
08

PHP SPL数据结构之双向链表的代码实现

<?php
/**
 * Created by PhpStorm daichen.
 * User: Administrator
 * Date: 2017/8/3
 * Time: 14:46
 */

/**
 * push 把新的节点数据添加到链表的顶部(Top)
 * unshift 把新的节点数据添加到链表底部(Bottom)
 * rewind 把节点指针指向bottom
 * current 获取节点指针指向的节点
 * next 使节点指针指向下一个节点
 * prev 使节点指向上一个节点
 * $obj->valid() 如果当前节点是有效节点 返回true 否则返回 false
 * shift 把bottom的节点从列表中删除,并返回。
 */

//实例化一个双向链表的对象
$obj = new SplDoublyLinkedList();

//push 把新的节点数据添加到链表的顶部(Top)
$obj->push(1);
$obj->push(2);
$obj->push(3);

//unshift 把新的节点数据添加到链表底部(Bottom)
$obj->unshift(10);
print_r($obj);

//rewind 把节点指针指向bottom
$obj->rewind();

//current 获取节点指针指向的节点
echo 'current:'.$obj->current() ."\n";

//使节点指针移动到下一个节点
$obj->next();  //2
$obj->next();  //3
$obj->next();  //空
$obj->prev();  //3

$obj->next();
//指向最后一个节点的下一个节点时 节点指针将指向空节点
$obj->next();  //空

if($obj->current()){
    echo "Current node valid\n";  //因为是空节点 所以是无效的
}
else{
    echo "Current node invalid\n";
}

//把节点指针指向bottom
$obj->rewind(); //1

//$obj->valid() 如果当前节点是有效节点 返回true 否则返回 false
if($obj->valid()){
    echo "valid List\n"; //指针指向了bottom 所以是有效的
}else{
    echo "invalid List\n";
}

echo "pop value:" . $obj->pop()."\n";
print_r($obj);

//pop操作不影响current
echo 'current:'.$obj->current() ."\n";  //10
$obj->next();  //1
$obj->next();  //2

//把TOP位置的节点从链表中删除 并返回 如果current证号指向Top位置 那么调用pop后current会失效
$obj->pop();
echo 'current:'.$obj->current() ."\n";
print_r($obj);

//shift把bottom的节点从列表中删除,并返回。
$obj->shift();
print_r($obj);

spl的常用数据结构双向链表.png PHP SPL数据结构之双向链表的代码实现 PHP SPL 第1张

QQ图片20170803155017.png PHP SPL数据结构之双向链表的代码实现 PHP SPL 第2张

« 上一篇 下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。