华大大的博客

PHP 实现链表结构

通过 PHP 的 数组函数 array_splice()实现增加和删除元素,current()next()实现当前元素与下个元素的指向问题,代替 C 语言中的指针。

<?php
class LinkedList
{
    private $list = [];

    public function get($index)
    {
        $value = NULL;
        while (current($this->list)) {
            if (key($this->list) == $index) {
                $value = current($this->list);
                break;
            }
            next($this->list);
        }
        reset($this->list);
        return $value;
    }

    // 在链表中插入元素,默认插在表头
    public function add($value, $index = 0)
    {
        array_splice($this->list, $index, 0, $value);
    }

    // 删除元素
    public function remove($index) 
    {
        array_splice($this->list, $index, 1);
    }

    public function isEmpty()
    {
        return !next($this->list);
    }

    public function size()
    {
        return count($this->list);
    }
}

下面来测试一下

$linkedList = new LinkedList();
$linkedList->add(4);
$linkedList->add(5);
$linkedList->add(3);
print $linkedList->get(1);   # 输出5
$linkedList->add(1, 1);      # 在结点1的位置上插入1
print $linkedList->get(1);   # 输出1
$linkedList->remove(1);      # 移除结点1上的元素
print $linkedList->get(1);   # 输出5
print $linkedList->size();   # 输出3

需要理解 PHP 中的 current()next()函数

<?php
$people = array("Bill", "Steve", "Mark", "David");

echo current($people) . "<br>"; // 当前元素是 Bill
echo next($people) . "<br>"; // Bill 的下一个元素是 Steve
echo current($people) . "<br>"; // 现在当前元素是 Steve
echo prev($people) . "<br>"; // Steve 的上一个元素是 Bill
echo end($people) . "<br>"; // 最后一个元素是 David
echo prev($people) . "<br>"; // David 之前的元素是 Mark
echo current($people) . "<br>"; // 目前的当前元素是 Mark
echo reset($people) . "<br>"; // 把内部指针移动到数组的首个元素,即 Bill
echo next($people) . "<br>"; // Bill 的下一个元素是 Steve

print_r (each($people)); // 返回当前元素的键名和键值(目前是 Steve),并向前移动内部指针
?>

⬆️

写的不错,赞助一下主机费

扫一扫,用支付宝赞赏
扫一扫,用微信赞赏
RabbitMQ PHP使用 2019-01-23

暂无评论~~