文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

在 PHP 中实现链表

2024-02-27 20:45

关注

本文将介绍 PHP 中链表的实现。


使用 SplDoublyLinkedList 类在 PHP 中实现链表

链表是在许多编程语言中实现的常见数据结构。它是线性的,包含相互链接的节点。

每个节点都包含数据和到相邻节点的链接。因此,链表形成了一个节点链。链表有不同的变体。

  1. 单链表:单向。它只在向前的方向上移动。
  2. 双链表:是双向的。它向前和向后两个方向遍历。
  3. 循环链表:单向循环。
  4. 循环双向链表:双向循环。

我们可以在链表中进行各种操作。基本操作如下:

PHP 提供了一个类 SplDoublyLinkedList 用于实现链表。它是一个双向链表。


使用 push() 方法在链表中插入值

push() 方法接受要推送的参数并允许在列表中附加值。该元素将被推到链表的末尾。

例如,创建类 SplDoublyLinkedList 的实例并将其分配给 $list 变量。调用 push() 方法并插入元素。

示例代码:

$list = new SplDoublyLinkedList;

$list->push(10);
$list->push(20);
$list->push(30);
$list->push(40);
$list->push(40);

在下面的示例中,我们在一个空链表中附加了元素 1020304040。请注意,元素 40 被附加了两次。

我们可以使用下面的函数来显示列表的元素。

function displayList($list){
  for ($list->rewind(); $list->valid(); $list->next()) {
    echo $list->current()."<br>";
  }
}

rewind() 方法从链表的开头回退迭代器。例如,迭代器将移动到列表的第一个元素。

valid() 方法检查链表是否包含更多节点,next() 方法移动到链表的下一项。因此,我们可以在 for 循环中使用上述示例中的这些方法来遍历链表的元素。

在循环内部,current() 方法表示当前元素。因此,将打印当前元素。

当我们需要打印列表元素时,我们可以调用这个函数 displayList()。我们将在文章中多次使用此功能。

以下是我们以 $list 作为参数调用 displayList() 函数时的输出。

输出:

10
20
30
40
40

使用 add() 方法在链表中插入值

我们可以使用 add() 方法通过指定位置在链表中插入元素。该方法有两个参数。

第一个参数是要插入项目的索引,第二个参数是要插入的项目。例如,以 450 为参数调用 add() 方法并调用 displayList() 方法。

示例代码:

$list->add(4,50);
displayList($list);

上面的代码在我们创建的链表的第四个索引中添加了元素 50

输出:

10
20
30
40
50
40

结果,元素 50 出现在第四个索引中。之前在第四个索引中的元素 40 被移动到链表的末尾。


使用 pop() 方法删除链表中的元素

我们可以使用 pop() 方法从链表中删除最后一个元素。该方法不接受任何参数。

从上面的最后一个输出开始,该列表包含以下元素。

10
20
30
40
50
40

pop() 方法将从链表中删除最后一个元素(40)。

示例代码:

$list->pop();
displayList($list);

输出:

10
20
30
40
50

从链接列表中查找顶部和底部值

我们可以使用 top() 方法找到链表的顶部值,对于底部值,我们可以使用 bottom() 方法。下面的例子也是上面例子的延续。

该列表包含以下项目。

10
20
30
40
50

我们可以使用 $list 对象调用 top()bottom() 函数,并使用 echo 函数打印它们。

示例代码:

displayList($list);
echo "the top value: ".$list->top()."<br>";
echo "the bottom value: ".$list->bottom()."<br>";

结果,最上面的项目显示为 50,最底部的项目显示为 10

输出:

10
20
30
40
50
the top value: 50
the bottom value: 10
阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯