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中数组函数的巧用

    详解PHP中数组函数的巧用 PHP作为一门脚本语言,常常需要处理大量的数据,而数组作为一种常见的数据结构,其所涉及的操作也非常多。在这里,我们将介绍PHP中一些常用的数组函数,以及它们的一些巧用方法,希望对PHP开发者的工作有所帮助。 implode() / explode() 在处理字符串时,经常会遇到将一串字符串分割成多个子串的情况,或者将多个子串拼接成…

    PHP 2023年5月26日
    00
  • PHP实现的策略模式简单示例

    下面我来详细讲解PHP实现的策略模式简单示例的完整攻略。 策略模式简介 策略模式是一种行为设计模式,它允许你定义一系列算法,并将每个算法都封装起来,使它们可以相互替换。在策略模式中,算法的变化独立于使用算法的客户端。这意味着你可以在不修改客户端代码的情况下,更改算法的实现。 示例说明 下面我们通过两个示例来说明策略模式的使用。 示例一:收银员结算账单 假设我…

    PHP 2023年5月27日
    00
  • php之phpStudy的配置和工具的选择

      最近在考虑用php的成品源码去搭建一个个人博客网页,于是就想着先在本地运行好后,然后再使用服务器来搭建php的环境和网页。   1.运行工具   因为本地基本只是考虑练习,不考虑真正的去搭建php环境,所以就想到了一个很实用的php小工具,用于测试可以说是一个很不错的选择:phpStudy_pro,一个免费且好用的小集成环境吧(应该是)。   总结:ph…

    PHP 2023年4月17日
    00
  • php实现将数据做成json的格式给前端使用

    一、如何将数据转换为JSON格式? 1.使用 PHP 的内置函数 json_encode(),该函数将 PHP 中的实例和数据转换为 JSON 格式: $data= array( ‘name’ => ‘张三’, ‘age’ => 25, ‘gender’ => ‘男’ ); echo json_encode($data); 上述代码中,我们…

    PHP 2023年5月26日
    00
  • php数组键值用法实例分析

    PHP数组键值用法实例分析 在PHP中,数组是一种非常常见的数据类型,数组中的每个元素都由一个键和一个值组成。在这个主题中,我们将深入探讨数组的键值用法,并提供一些实例来演示数组键值的使用方法。 数组键值的概述 数组中的键可以是整数或字符串类型。如果键是整数,那么它们将自动赋值为按顺序递增的整数。如果键是字符串,则键就是该字符串本身。数组中的值可以是任何类型…

    PHP 2023年5月26日
    00
  • php 特殊字符处理函数

    1. PHP 特殊字符处理函数概述 在 PHP 中,特殊字符处理函数用于对字符串进行处理,转义或者删除非法字符。这些函数通常用于处理用户输入或从数据库中提取的文本。以下是 PHP 中常用的特殊字符处理函数: htmlentities() 函数:将字符串中的特殊字符转换为 HTML 实体,避免特殊字符被解释为 HTML 标签或 JavaScript 代码等; …

    PHP 2023年5月25日
    00
  • PHP 常用数组内部函数(Array Functions)介绍

    下面是 “PHP 常用数组内部函数(Array Functions)介绍” 的完整攻略: 概述 PHP 中的数组(Array)是一种非常重要的数据类型,它们可以存储多个值,并允许我们通过元素的索引或键来访问它们。另外一种常用的数据类型是对象(Object)。在 PHP 中,数组被广泛使用到各种应用场景中,例如存储所有的用户数据、网站配置信息、以及日志记录等。…

    PHP 2023年5月26日
    00
  • PHP基于工厂模式实现的计算器实例

    让我来详细讲解一下“PHP基于工厂模式实现的计算器实例”的完整攻略。 1. 工厂模式简介 工厂模式是一种非常常用的设计模式,它可以根据不同的条件来创建不同的对象,从而实现对对象的管理和抽象化。在实际开发中,我们经常会使用工厂模式来创建对象,从而降低系统耦合度,提高代码的可复用性。 2. 计算器实例 基于工厂模式的计算器实例,是一种非常经典的应用场景。在计算器…

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