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变量与数组相互转换的方法(extract与compact)

    下面是 php 变量与数组相互转换的方法(extract与compact)的完整攻略: extract 函数 extract 函数可以将一个关联数组解包为一系列同名变量,其语法为: extract($array, $flags = EXTR_OVERWRITE, $prefix = null); $array:要解包的关联数组。 $flags:可选参数,控制…

    PHP 2023年5月26日
    00
  • windows下apache搭建php开发环境

    一、安装Apache 访问Apache官网,下载最新版的Apache。下载网址为:http://www.apache.org。 下载完后,在安装目录下找到conf\httpd.conf文件,用文本编辑器打开。 找到配置文件中的 ServerName,修改为本机IP地址或者localhost。 配置Apache环境。打开控制面板,点击“管理工具”,选择“服务”…

    PHP 2023年5月23日
    00
  • php加密解密字符串示例

    下面是详细的 PHP 加密解密字符串示例攻略: 什么是字符串加密? 字符串加密是指把一个原始字符串转换为另一个字符串,并且只有掌握加密方法和密钥的人才能对加密字符串进行解密还原,以达到保护数据的目的。在 PHP 中,常用的字符串加密算法有 MD5、SHA1、AES 等。 字符串加密与解密 MD5 字符串加密示例 MD5 是一种常用的单向加密算法,可以将一个字…

    PHP 2023年5月26日
    00
  • 关于PHP内置的字符串处理函数详解

    关于PHP内置的字符串处理函数详解 1. 字符串处理函数的基本使用 在PHP中,我们可以使用许多内置的字符串处理函数,这些函数都可以对字符串进行各种操作,例如字符串的拼接、替换、剪切、分割等等。下面介绍一些常用的字符串处理函数。 1.1 字符串的拼接 字符串拼接可以使用点号(.)或者双引号(”)进行拼接操作。例如: $str1 = "Hello,&…

    PHP 2023年5月26日
    00
  • 详解PHP对数组的定义以及数组的创建方法

    当涉及到数据的存储和处理时,数组是PHP中最常用的数据类型之一。在本文中,我们将详细讲解PHP对数组的定义以及数组的创建方法。 定义数组 在PHP中,数组是一个有序的集合,它可以包含一个或多个值。每个值称为数组元素。每一个数组元素都有一个唯一的键(或索引),用于访问该元素。 以下是一个简单的示例,演示如何在PHP中定义数组: $fruits = array(…

    PHP 2023年5月26日
    00
  • php实现的操作excel类详解

    PHP实现操作Excel类详解 Microsoft Excel是目前最常用的电子表格软件,而PHP中也有一些操作Excel的类库可以使用。在本文中,我们将详细讲解如何使用PHP类库来操作Excel。 安装类库 在PHP中要使用Excel类库,需要首先安装PHPExcel类库。可以通过如下方式进行安装: composer require phpoffice/p…

    PHP 2023年5月25日
    00
  • WordPress中注册菜单与调用菜单的方法详解

    WordPress中注册菜单与调用菜单的方法详解 WordPress是一款流行的内容管理系统,它提供了丰富的自定义功能,其中之一就是自定义菜单。本文将介绍WordPress中注册菜单与调用菜单的方法,从而帮助您更好地管理自己的网站。 注册菜单 注册菜单是指在WordPress后台中定义一个新的菜单,目的是让您能够将它添加到网站的不同部分,并为它添加自定义链接…

    PHP 2023年5月26日
    00
  • PHP实现合并两个排序链表的方法

    PHP实现合并两个排序链表的方法 1. 思路 定义一个新的链表,用来存放合并后的元素 依次比较两个链表中的元素大小,较小的元素作为新链表的头节点,将其后继指向较大元素的头节点 重复以上步骤,直到其中一个链表为空 将非空链表的剩余元素依次加入到新链表的末尾 2. 代码实现 class ListNode { public $val = 0; public $ne…

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