千家信息网

php中怎么实现数据结构的单向链表

发表于:2025-01-26 作者:千家信息网编辑
千家信息网最后更新 2025年01月26日,本篇文章给大家分享的是有关php中怎么实现数据结构的单向链表,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。代码实现定义节点class N
千家信息网最后更新 2025年01月26日php中怎么实现数据结构的单向链表

本篇文章给大家分享的是有关php中怎么实现数据结构的单向链表,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

代码实现

定义节点

class Node{    public $data;    /**     * @var null | Node     */    public $next;    public function __construct($data)    {        $this->data = $data;        $this->next = null;    }}

单链表实现

/** * Class SingleLinkList * 单链接的实现示例,实现简单的填加,插入,删除, 查询,长度,遍历这几个简单操作 */class SingleLinkList{    /**     * 链表头结点,头节点必须存在,     * @var Node     */    public $header;    private $size = 0;    /**     * 构造函数,默认填加一个哨兵节点,该节点元素为空     * SingleLinkList constructor.     */    public function __construct()    {        $this->header = new Node(null);    }    /**     * 在链表末尾添加节点     * @param Node $node     * @return int     */    public function addNode(Node $node)    {        $current = $this->header;        while ($current->next != null) {            $current = $current->next;        }        $current->next = $node;        return ++$this->size;    }    /**     * 在指定位置插入节点     * @param int $index 节点位置,从1开始计数     * @param Node $node     * @return int     * @throws Exception     */    public function insertNodeByIndex($index, Node $node)    {        if ($index < 1 || $index > ($this->size + 1)) {            throw new Exception(sprintf('你要插入的位置,超过了链表的长度 %d', $this->size));        }        $current = $this->header;        $tempIndex = 1;        do {            if ($index == $tempIndex++) {                $node->next = $current->next;                $current->next = $node;                break;            }        } while ($current->next != null && ($current = $current->next));        return ++$this->size;    }    /**     * 删除节点     * @param int $index 节点位置,从1开始计数     * @return int     * @throws Exception     */    public function deleteNodeByIndex($index)    {        if ($index < 1 || $index > ($this->size + 1)) {            throw new Exception('你删除的节点不存在');        }        $current = $this->header;        $tempIndex = 1;        do {            if ($index == $tempIndex++) {                $current->next = $current->next->next;                break;            }        } while ($current->next != null && ($current = $current->next));        return --$this->size;    }    /**     * 查询节点     * @param int $index 节点位置,从1开始计数     * @return Node|null     * @throws Exception     */    public function searchNodeByIndex($index) {        if ($index < 1 || $index > ($this->size + 1)) {            throw new Exception('你查询的节点不存在');        }        $current = $this->header;        $tempIndex = 1;        do {            if ($index == $tempIndex++) {                return $current->next;            }        } while ($current->next != null && ($current = $current->next));    }    /**     * 获取节点长度     * @return int     */    public function getLength()    {        return $this->size;    }    /**     * 遍历列表     */    public function showNode()    {        $current = $this->header;        $index = 1;        while ($current->next != null) {            $current = $current->next;            echo 'index --- ' . $index++ . ' --- ';            echo var_export($current->data);            echo PHP_EOL;        }    }}

示例

$link = new SingleLinkList();$link->addNode(new Node(1));$link->addNode(new Node(2));$link->insertNodeByIndex(3, new Node(3));$link->addNode(new Node(4));$link->addNode(new Node(5));echo $link->getLength(), PHP_EOL;$link->showNode();echo '-----------', PHP_EOL;var_dump($link->searchNodeByIndex(3));echo '-----------', PHP_EOL;$link->deleteNodeByIndex(3);$link->showNode();

以上就是php中怎么实现数据结构的单向链表,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注行业资讯频道。

0