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)
上一篇 4天前
下一篇 4天前

相关文章

  • 遭遇php的in_array低性能问题

    当使用in_array()函数来查找一个值是否在一个数组中存在时,如果该数组中的元素数量较多,该函数的性能会受到影响。本攻略将详细讲解如何遭遇php的in_array()低性能问题以及优化的方法,包含以下几个方面: 性能分析 优化方案 性能分析 查看API文档 在使用in_array()函数之前,我们需要先了解这个函数的使用方式和限制条件。可以查看官方文档或…

    PHP 5天前
    00
  • PHP中isset()和unset()函数的用法小结

    来详细讲解一下“PHP中isset()和unset()函数的用法小结”。 isset()函数的用法 在 PHP 中,我们可以使用 isset() 函数来判断一个变量是否已经被声明和赋值。该函数接收待测试的变量作为参数,返回一个布尔值 true 或 false,表明该变量是否被设置。 isset()函数的语法 isset($var); 其中 $var 是要检测…

    PHP 6天前
    00
  • PHP合并数组函数array_merge用法分析

    PHP合并数组函数array_merge用法分析 PHP提供了array_merge函数,用于合并两个或多个数组,将它们组合成一个单独的数组。本文将介绍array_merge函数的用法。 语法 array_merge(array1,array2,array3,…) 参数: array1 必须,表示第一个被合并的数组。 array2 必须,表示第二个被合并…

    PHP 6天前
    00
  • PHP开发入门教程之面向对象

    认识面向对象编程(Object Oriented Programming,OOP)是学习PHP的一个重要环节,面向对象编程是一种程序设计风格,它将类或对象作为主要的软件组织单元,以便具有结构性和可重用性。本教程将深入探索PHP面向对象编程的方方面面,为您提供学习的完整攻略。 一. 安装PHP环境 在开始这个教程之前,我们需要安装PHP环境,可以选择在自己的电…

    PHP 2023年5月23日
    00
  • PHP CLI模式下的多进程应用分析

    PHP CLI模式下的多进程应用可以通过PHP的pcntl和posix扩展来实现。本攻略将介绍如何使用这两个扩展来实现多进程的应用。 安装pcntl和posix扩展 PHP CLI模式默认不包含pcntl和posix扩展,需要手动安装。下面是安装命令的参考样例: Debian / Ubuntu sudo apt-get install php-pcntl s…

    PHP 5天前
    00
  • PHP基于递归实现的约瑟夫环算法示例

    下面是“PHP基于递归实现的约瑟夫环算法示例”的完整攻略。 约瑟夫环算法简介 约瑟夫环是一个数学问题,具体问题为:有n个人围成一圈,从第一个人开始报数,报到第m个人出列,然后从出列的下一个人开始重新报数,报到第m个人又出列,以此类推,直到所有人都出列为止,由此产生一个出队编号的序列。 约瑟夫环算法实现 思路 我们可以使用递归来实现约瑟夫环算法。具体思路如下:…

    PHP 5天前
    00
  • PHP实现抓取HTTPS内容

    要实现抓取HTTPS网页内容,可以采用以下步骤: 首先,需要禁用SSL验证。因为HTTPS通信是基于SSL协议的,如果不禁用验证,会导致无法连接到目标站点或连接被中断。可以通过以下代码忽略SSL验证: $options = array( ‘ssl’ => array( ‘verify_peer’ => false, ‘verify_peer_na…

    PHP 5天前
    00
  • php数组函数序列之asort() – 对数组的元素值进行升序排序,保持索引关系

    asort()是一个PHP数组函数,用于对数组的元素值进行升序排序。此函数排序后会保持原有的索引关系,也就是说,排序后的数组依旧保留着原有的键名和键值对应关系。 asort()函数的语法如下: asort(array $array , int $sort_flags = SORT_REGULAR ); 其中,第一个参数$arry表示需要排序的数组;第二个参数…

    PHP 5天前
    00
  • 谈谈新手如何学习PHP

    以下是“谈谈新手如何学习PHP”的完整攻略。 1. 基础知识的学习 首先,学习PHP需要有一定的编程基础。如果你是完全的编程新手,建议先学习一门编程语言,例如Python或者JavaScript。对于已经具备一定编程基础的人来说,可以直接开始学习PHP。 在学习PHP的基础知识方面,以下是一些建议: 1.1 网上教程 可以在网上寻找一些PHP的在线教程,例如…

    PHP 2023年5月23日
    00
  • PHP中流的定义及作用详解

    以下是“PHP中流的定义及作用详解”的完整使用攻略,包括流的基本概念、常见类型和示例说明等内容。 流的基本概念 流是指在程序中对数据进行输入和输出的一种机制。在PHP中,流可以用于读取和写入文件、网络通信、数据压缩等操作。 常见类型 以下是PHP中常见的流类型: 1. 文件流 文件流指对文件进行读取和写入的一种流类型。在PHP中,可以使用fopen函数打开文…

    PHP 2023年5月12日
    00