php单链表实现代码分享

让我为您详细讲解一下“PHP单链表实现代码分享”的攻略。

什么是单链表

单链表是一种链式存储结构,是由头节点和若干个节点组成的。 每个节点包含两个成员,一个成员是数据,另一个成员是指向下一个节点的指针。一个链表可以看做是一个链式存储的节点的集合,其中每个节点指向下一个节点,直到最后一个节点指针指向NULL。

单链表的实现

实现一个单链表需要维护以下几个操作:

  1. 初始化链表:创建一个空链表,头部指针指向NULL。
  2. 插入节点:在某个节点后面插入一个新节点。
  3. 删除节点:删除指定节点。
  4. 查找节点:查找指定节点。

下面是一个PHP实现的单链表代码,您可以参考其中的实现逻辑。

<?php

class Node {
    public $data;   // 节点数据
    public $next;   // 指向下一个节点的指针

    public function __construct($data) {
        $this->data = $data;
        $this->next = null;
    }
}

class LinkedList {
    private $head;  // 链表头指针

    public function __construct() {
        $this->head = null;
    }

    // 在指定节点后面插入一个新节点
    public function insertAfter($node, $data) {
        if ($node == null) {
            return false;
        }

        $newNode = new Node($data);
        $newNode->next = $node->next;
        $node->next = $newNode;
    }

    // 删除指定节点
    public function delete($node) {
        if ($node == null || $this->head == null) {
            return false;
        }

        if ($node == $this->head) {
            $this->head = $this->head->next;
            return true;
        }

        $prev = $this->head;
        while ($prev != null && $prev->next != $node) {
            $prev = $prev->next;
        }

        if ($prev == null) {
            return false;
        }

        $prev->next = $node->next;
        return true;
    }

    // 查找节点
    public function search($data) {
        $node = $this->head;
        while ($node != null && $node->data != $data) {
            $node = $node->next;
        }

        return $node;
    }

    // 遍历链表
    public function traverse() {
        $node = $this->head;
        while ($node != null) {
            echo $node->data . " ";
            $node = $node->next;
        }
    }
}

$linkedList = new LinkedList();

// 插入新节点
$node1 = new Node(100);
$linkedList->insertAfter(null, $node1);
$node2 = new Node(200);
$linkedList->insertAfter($node1, $node2);
$node3 = new Node(300);
$linkedList->insertAfter($node2, $node3);

// 遍历链表
$linkedList->traverse();  // 输出: 100 200 300

// 删除节点
$linkedList->delete($node2);
$linkedList->traverse();  // 输出: 100 300

// 查找节点
$node = $linkedList->search(100);
echo $node->data;  // 输出: 100

?>

上面的代码实现了单链表的初始化、插入节点、删除节点、查找节点等操作,您可以根据您的需求进行相应的修改和扩展。

下面提供一些示例,帮助您更好地了解单链表的使用。

示例1:链表实现栈

下面是一个用单链表实现栈的示例,具体实现思路是:链表头指针作为栈顶指针,每次入栈时在链表头插入一个新节点,每次出栈时删除链表头节点即可。

class Stack {
    private $list;

    public function __construct() {
        $this->list = new LinkedList();
    }

    public function push($data) {
        $this->list->insertAfter(null, $data);
    }

    public function pop() {
        $node = $this->list->delete($this->list->head);
        if ($node) {
            return $node->data;
        }
        return null;
    }
}

$stack = new Stack();
$stack->push(100);
$stack->push(200);
$stack->push(300);
echo $stack->pop() . "<br>";   // 输出: 300
echo $stack->pop() . "<br>";   // 输出: 200
echo $stack->pop() . "<br>";   // 输出: 100

示例2:链表实现队列

下面是一个用单链表实现队列的示例,具体实现思路是:链表尾指针作为队尾指针,每次入队时在链表尾部插入一个新节点,每次出队时删除链表头节点即可。

class Queue {
    private $list;

    public function __construct() {
        $this->list = new LinkedList();
    }

    public function enqueue($data) {
        $this->list->insertAfter($this->list->searchLast(), $data);
    }

    public function dequeue() {
        $node = $this->list->delete($this->list->head);
        if ($node) {
            return $node->data;
        }
        return null;
    }
}

$queue = new Queue();
$queue->enqueue(100);
$queue->enqueue(200);
$queue->enqueue(300);
echo $queue->dequeue() . "<br>";    // 输出: 100
echo $queue->dequeue() . "<br>";    // 输出: 200
echo $queue->dequeue() . "<br>";    // 输出: 300

希望以上的讲解和示例能够帮助您更好地理解和使用单链表。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:php单链表实现代码分享 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • PHP中strpos、strstr和stripos、stristr函数分析

    PHP中strpos、strstr和stripos、stristr函数分析 什么是strpos函数和strstr函数? strpos 函数:查找字符串首次出现的位置。 strstr 函数:查找字符串在另外一个字符串中的第一次出现。 这两个函数区别在于: strpos 返回的是目标字符串在原字符串中的起始位置; strstr 返回的则是目标字符串之后,原字符串…

    PHP 2023年5月26日
    00
  • php获取字符串中各个字符出现次数的方法

    当我们需要统计一个字符串中各个字符出现的次数时,可以使用PHP内置函数count_chars()来实现。具体步骤如下: 1. 使用count_chars() 函数 count_chars()函数接受一个字符串参数,并返回一个关联数组,该数组的键是所有出现过的字符ASCII码,对应的值是该字符在字符串中出现的次数。在返回数组中,未出现的字符将被省略,其它字符则…

    PHP 2023年5月26日
    00
  • php curl模拟post提交数据示例

    关于“php curl模拟post提交数据示例”的攻略,我来为你详细讲解。 1. 简介 cURL是一种可以通过URL的方式来传输数据的函数库。也就是说,我们可以用它来模拟发送HTTP请求,包括POST和GET请求。而PHP cURL则是一个PHP扩展,提供了与cURL库的接口。 在实际应用中,我们使用cURL来模拟POST请求的场景非常多,比如登录验证、数据…

    PHP 2023年5月23日
    00
  • 详解php的魔术方法__get()和__set()使用介绍

    详解PHP的魔术方法__get()和__set()使用介绍 在PHP中,魔术方法是指一类特殊的方法,它们有着特定的名称和用途。其中,__get()和__set()是两个常用的魔术方法,它们分别用于获取和设置一个类中不存在的属性。 __get()方法介绍 __get($name)方法是一个用于获取不存在的属性时,自动调用的方法。它接收一个参数$name,代表所…

    PHP 2023年5月25日
    00
  • PHP中计算字符串相似度的函数代码

    下面是 PHP 中计算字符串相似度的函数代码的完整攻略。 1. 了解字符串相似度计算方法 常用的字符串相似度计算方法有:莱文斯坦距离、Jaccard系数、余弦相似度等。 莱文斯坦距离:指两个字符串之间,由一个转成另一个所需的最少编辑操作次数。允许的编辑操作包括插入、删除、替换。 Jaccard系数:指两个集合的交集大小除以它们的并集大小。它衡量的是两个集合之…

    PHP 2023年5月26日
    00
  • php 操作excel文件的方法小结

    下面是“php 操作excel文件的方法小结”的完整攻略: 一、前言 Microsoft Excel 是一款功能强大的电子表格软件,不仅在办公用途中很常用,而且在数据分析和处理方面也有着很广泛的应用。本文介绍如何使用 PHP 来操作 Excel 文件。 二、操作 Excel 文件 1. 使用 PHPExcel 库 PHPExcel 是 PHP 操作 Exce…

    PHP 2023年5月26日
    00
  • php中的Base62类(适用于数值转字符串)

    PHP中的Base62类 Base62类是一种数值转字符串的工具,它将数字从10进制转换为62进制后再转化为字符串,适用于生成随机字符串、短链接等场景。下面就来详细讲解如何在PHP中使用Base62类完成这一操作。 安装 Base62类并不是PHP的原生类,需要使用composer进行安装。在安装前需要安装composer(PHP的包管理工具),安装方法见官…

    PHP 2023年5月26日
    00
  • PHP实现倒计时功能

    下面是PHP实现倒计时功能的完整攻略。 步骤一:定义倒计时结束时间 首先,你需要定义倒计时结束的时间,可以用PHP中的date()函数进行定义。比如,我们定义倒计时结束时间为2022年1月1日 00:00:00。 $endtime = strtotime(‘2022-01-01 00:00:00’); 步骤二:计算倒计时剩余时间 接下来,你需要计算倒计时剩余…

    PHP 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部