PHP小教程之实现链表

PHP小教程之实现链表

什么是链表

链表是一种常见的线性结构,在计算机科学中有着广泛的应用。链表由若干个节点构成,每个节点都包含一个数据元素和一个指向下一个节点的引用。通俗的说,链表就像一条链子,链子上有很多环节,每个环节都有一些信息,同时也知道下一个环节在哪里。

链表的实现

链表可以使用 PHP 数组,但是我们也可以通过代码实现自己的链表类。下面是链表的核心部分代码。

<?php

class ListNode {
    public $data = NULL;
    public $next = NULL;

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

class LinkedList {
    private $firstNode = NULL;
    private $lastNode = NULL;
    private $nodeCount = 0;

    public function append($data) {
        $newNode = new ListNode($data);

        if ($this->firstNode === NULL) {
            $this->firstNode = &$newNode;
            $this->lastNode = $newNode;
        } else {
            $this->lastNode->next = $newNode;
            $this->lastNode = $newNode;
        }

        $this->nodeCount++;
        return TRUE;
    }

    public function delete($pos) {
        if ($this->nodeCount === 0 || $pos < 1 || $pos > $this->nodeCount) {
            return FALSE;
        }

        $current = $this->firstNode;
        if ($this->nodeCount === 1) {
            $this->firstNode = NULL;
            $this->lastNode = NULL;
            $this->nodeCount = 0;
            return TRUE;
        } elseif ($pos === 1) {
            $this->firstNode = $this->firstNode->next;
            $this->nodeCount--;
            return TRUE;
        } else {
            $previous = NULL;
            $count = 1;

            while ($count < $pos) {
                $previous = $current;
                $current = $current->next;
                $count++;
            }

            $previous->next = $current->next;
            $this->nodeCount--;

            if ($this->lastNode === $current) {
                $this->lastNode = $previous;
            }

            return TRUE;
        }
    }

    public function display() {
        echo "Total nodes: " . $this->nodeCount . "\n";
        $current = $this->firstNode;
        while ($current !== NULL) {
            echo $current->data . "\n";
            $current = $current->next;
        }
    }
}

这段代码定义了 ListNode 类和 LinkedList 类,其中 ListNode 类是每个节点的数据结构,LinkedList 类则是链表本身的实现。

ListNode 类

ListNode 类包含了两个成员变量:$data 和 $next。其中,$data 是每个节点的数据,$next 是指向链表下一个节点的指针。ListNode 类定义的是如何表达单个节点的结构。

LinkedList 类

LinkedList 类定义了几个成员变量:$firstNode 和 $lastNode 定义链表的首节点和尾节点;$nodeCount 表示链表中包含的节点个数。

类中的三个方法:

  • append(): 往链表的最后一个节点追加新节点
  • delete(): 删除链表中指定位置的节点
  • display(): 显示链表的详细信息

示例1

$list = new LinkedList();
$list->append('PHP');
$list->append('Java');
$list->append('Python');
$list->delete(2);
$list->display();

运行以上代码,输出如下:

Total nodes: 2
PHP
Python

首先创建了一个 LinkedList 的实例,并添加了三个节点,分别是 “PHP”、”Java“、”Python“。然后,删除了第二个元素”Java“。最后,调用 display() 方法,展示链表中剩余的节点信息。

示例2

$list = new LinkedList();
$list->append(1);
$list->append(2);
$list->append(3);
$list->delete(2);
$list->append(4);
$list->display();

运行以上代码,输出如下:

Total nodes: 3
1
3
4

这个示例的过程和示例 1 的过程基本一致,在链表中添加了四个元素 1、2、3、4。其中,删除第二个元素”2“,然后,在链表的最后面添加了新元素”4“。最后,调用 display() 方法,展示链表中剩余的节点信息。

总结

本文通过 PHP 实现链表类,介绍了链表和其基本实现以及一些由此引发的操作。链表是计算机科学中常用的数据结构,掌握链表对于开发者来说是相对比较容易的。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:PHP小教程之实现链表 - Python技术站

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

相关文章

  • php读取文件内容到数组的方法

    当我们需要读取一个文件的内容时,如果想要把每一行的数据都读入到一个数组中,我们可以使用PHP提供的file函数。file函数会把文件中的每一行读取为一个数组中的元素。 具体的操作方法如下: 1.读取文件到数组 $array = file($filename, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); 该函…

    PHP 2023年5月26日
    00
  • 显示程序执行时间php函数代码

    想要显示程序执行时间,可以使用PHP函数来完成。下面是实现的完整攻略: 步骤一:获取时间戳 PHP中有一个名为microtime()的函数,它能够获取当前时间的微秒级时间戳。我们可以在程序开始和结束的时候调用该函数获取时间戳,然后获取时间差来计算程序的执行时间。 $start_time = microtime(true); // 待计时的代码段 $end_t…

    PHP 2023年5月23日
    00
  • php 备份数据库代码(生成word,excel,json,xml,sql)

    下面将详细讲解“PHP备份数据库代码(生成Word,Excel,JSON,XML,SQL)”的完整攻略。这个攻略包含以下几个部分: 连接数据库 获取数据表信息 生成SQL脚本备份 生成Excel备份 生成Word备份 生成JSON备份 生成XML备份 第一步,连接数据库。连接数据库是备份操作的第一步。要连接数据库,需要使用PHP内置的mysqli或PDO扩展…

    PHP 2023年5月26日
    00
  • 本地搭建微信小程序服务器的实现方法

    本地搭建微信小程序服务器的实现方法主要包括以下几个步骤: 确定需要使用的服务器框架:目前常用的有Express、Koa等框架。这里以Express为例进行讲解。 安装Node.js环境:在本地搭建服务器之前,需要先安装Node.js环境。可以到Node.js的官网(https://nodejs.org/en/)下载安装包,选择对应的操作系统版本进行安装。 初…

    PHP 2023年5月30日
    00
  • PHP实现文件上传和多文件上传

    下面是详细讲解“PHP实现文件上传和多文件上传”的完整攻略。 文件上传 文件上传是指将文件从客户端上传到服务器,PHP实现文件上传的步骤如下: 在前端页面添加文件上传表单,例如: <form action="upload.php" method="post" enctype="multipart/for…

    PHP 2023年5月26日
    00
  • PHP使用array_multisort对多个数组或多维数组进行排序

    下面是“PHP使用array_multisort对多个数组或多维数组进行排序”的完整攻略: 1. array_multisort()函数介绍 array_multisort()函数是 PHP 内置的多维数组排序函数,它可以用来对多个关联数组或多维数组进行排序。该函数的作用是依次按指定顺序对两个或两个以上的数组进行排序,然后依照它们之间的顺序来排序。如果数组中…

    PHP 2023年5月26日
    00
  • PHP中localeconv()函数的用法

    让我来详细为你讲解一下PHP中localeconv()函数的用法。 1. 首先介绍localeconv()函数的作用 PHP中的localeconv()函数用于获取本地信息,包括货币符号、小数点符号、千分位分隔符、货币格式等,并以关联数组的形式返回这些信息。 2. localeconv()函数的语法 localeconv() 3. localeconv()函…

    PHP 2023年5月26日
    00
  • 用asp与php实现百度ping服务的代码

    下面是详细讲解“用asp与php实现百度ping服务的代码”的完整攻略。 1. 什么是百度ping服务 首先,我们需要了解百度ping服务是什么。百度ping服务是百度提供的一项推送服务,可以让站长自动向百度搜索引擎推送新的或变更的网站页。推送方式有两种,分别为XML-RPC API和HTTP API。 2. 实现百度ping服务的代码 2.1 ASP实现百…

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