php单链表实现代码分享

yizhihongxing

让我为您详细讲解一下“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中Socket创建与监听实现方法

    以下是关于“php中Socket创建与监听实现方法”的完整攻略: Socket简介 Socket又称作“套接字”,是在应用层和传输层之间的一个抽象层,它负责处理所有网络通信的细节。在Socket的帮助下,我们可以方便地在不同的计算机之间传送数据,实现网络通信。 Socket创建与监听的实现方法 在PHP中,我们可以使用Socket扩展来创建和监听Socket…

    PHP 2023年5月27日
    00
  • php恢复数组的key为数字序列的方法

    当PHP数组中的key不是数字序列时,可以通过以下方法进行恢复: 方法一:使用array_values函数 使用array_values函数可以获取某个数组的所有值,同时重新索引它们并返回一个新的数组。这个新的数组的key就是数字序列。 $assocArr = array(‘foo’ => ‘bar’, ‘baz’ => ‘boom’); $in…

    PHP 2023年5月26日
    00
  • 微信小程序名称可以修改几次? 微信小程序修改名称的方法

    下面是关于微信小程序名称修改的完整攻略,包括修改次数和方法介绍。 微信小程序名称可以修改几次? 微信小程序的名称可以修改不限次数,但是每次修改都需要重新提交审核,审核通过后才能使用。 微信小程序修改名称的方法 微信小程序修改名称的方法比较简单,只需要进入小程序管理后台即可。下面介绍具体步骤: 登录小程序管理后台,选择“开发”-“开发设置”-“基本设置” 在“…

    PHP 2023年5月23日
    00
  • 用PHP实现的四则运算表达式计算实现代码

    下面我来详细讲解用PHP实现的四则运算表达式计算实现代码的攻略,包括以下几个步骤: 获取用户输入的四则运算表达式,并进行合法性检验; 将表达式转换为逆波兰表达式(RPN)形式; 计算逆波兰表达式,得出最终的计算结果。 接下来我来详细解释每个步骤的具体实现。 1. 获取用户输入的四则运算表达式,并进行合法性检验 首先,我们需要获取用户输入的四则运算表达式,可以…

    PHP 2023年5月27日
    00
  • PHP抓取及分析网页的方法详解

    下面是“PHP抓取及分析网页的方法详解”的完整攻略。 1. 为什么使用PHP抓取网页 如果你想要获取一些其他网站中的数据,可以使用PHP进行网页抓取。PHP是一种在网页编程和网络交互中非常常用的语言,可以很方便地进行网页爬取和数据提取。使用PHP可以轻松获取从其他网站抓取的相关数据,做到信息一站式采集,从而方便你自己的应用程序的开发。 2. 得到起始页面HT…

    PHP 2023年5月26日
    00
  • WiiU模拟器怎么使用?WiiU模拟器使用教程

    WiiU模拟器使用教程 本文将为大家介绍如何使用WiiU模拟器进行游戏模拟。在使用模拟器前请务必确认自己已经获得了合法的游戏ROM,并遵循相关法律法规。 步骤一:下载模拟器软件 首先需要从WiiU模拟器的官方网站(如Cemu官网)或第三方下载站点上下载WiiU模拟器的软件安装包(通常为一个.exe或.dmg文件)。下载完成后,请按照相关提示完成软件的安装。 …

    PHP 2023年5月27日
    00
  • php在线打包程序源码

    请看下面的详细讲解。 PHP在线打包程序源码的完整攻略 简介 PHP在线打包程序是一种方便Web开发的工具,它允许您将多个PHP文件打包成一个文件,以便于在Web服务器上部署和使用。在本文中,我们将介绍如何使用PHP在线打包程序生成打包后的代码。 步骤 1. 下载和安装PHP在线打包程序 首先,您需要下载和安装PHP在线打包程序。您可以从其官方网站或Gith…

    PHP 2023年5月23日
    00
  • php面试实现反射注入的详细方法

    让我来详细讲解一下用PHP实现反射注入的方法。 什么是反射注入? 反射注入,又称为“依赖注入”,是将一个对象实例注入到另一个对象中,以便后者可以使用前者提供的服务。反射注入可以显著减少代码的耦合度,提高代码的可维护性和可扩展性。 如何使用反射注入? 使用反射注入,需要先创建一个反射类,通过反射类获取到需要注入的类的构造函数,然后通过构造函数创建一个新的实例。…

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