啥是单向链表

链表是以链式存储数据的结构,其不需要连续的存储空间,链表中的数据以节点来表示,每个节点由元素(存储数据)和指针(指向后继节点)组成。

单向链表(也叫单链表)是链表中最简单的一种形式,每个节点只包含一个元素和一个指针。

它有一个表头,并且除了最后一个节点外,所有节点都有其后继节点。

它的存储结构如下图所示

代码实现

定义节点

class Node

{

public $data;

/**

* @var null | Node

*/

public $next;

public function __construct($data)

{

$this->data = $data;

$this->next = null;

}

}

单链表实现

/**

* Class SingleLinkList

* 单链接的实现示例,实现简单的填加,插入,删除, 查询,长度,遍历这几个简单操作

*/

class SingleLinkList

{

/**

* 链表头结点,头节点必须存在,

* @var Node

*/

public $header;

private $size = 0;

/**

* 构造函数,默认填加一个哨兵节点,该节点元素为空

* SingleLinkList constructor.

*/

public function __construct()

{

$this->header = new Node(null);

}

/**

* 在链表末尾添加节点

* @param Node $node

* @return int

*/

public function addNode(Node $node)

{

$current = $this->header;

while ($current->next != null) {

$current = $current->next;

}

$current->next = $node;

return ++$this->size;

}

/**

* 在指定位置插入节点

* @param int $index 节点位置,从1开始计数

* @param Node $node

* @return int

* @throws Exception

*/

public function insertNodeByIndex($index, Node $node)

{

if ($index < 1 || $index > ($this->size + 1)) {

throw new Exception(sprintf('你要插入的位置,超过了链表的长度 %d', $this->size));

}

$current = $this->header;

$tempIndex = 1;

do {

if ($index == $tempIndex++) {

$node->next = $current->next;

$current->next = $node;

break;

}

} while ($current->next != null && ($current = $current->next));

return ++$this->size;

}

/**

* 删除节点

* @param int $index 节点位置,从1开始计数

* @return int

* @throws Exception

*/

public function deleteNodeByIndex($index)

{

if ($index < 1 || $index > ($this->size + 1)) {

throw new Exception('你删除的节点不存在');

}

$current = $this->header;

$tempIndex = 1;

do {

if ($index == $tempIndex++) {

$current->next = $current->next->next;

break;

}

} while ($current->next != null && ($current = $current->next));

return --$this->size;

}

/**

* 查询节点

* @param int $index 节点位置,从1开始计数

* @return Node|null

* @throws Exception

*/

public function searchNodeByIndex($index) {

if ($index < 1 || $index > ($this->size + 1)) {

throw new Exception('你查询的节点不存在');

}

$current = $this->header;

$tempIndex = 1;

do {

if ($index == $tempIndex++) {

return $current->next;

}

} while ($current->next != null && ($current = $current->next));

}

/**

* 获取节点长度

* @return int

*/

public function getLength()

{

return $this->size;

}

/**

* 遍历列表

*/

public function showNode()

{

$current = $this->header;

$index = 1;

while ($current->next != null) {

$current = $current->next;

echo 'index --- ' . $index++ . ' --- ';

echo var_export($current->data);

echo PHP_EOL;

}

}

}

示例

$link = new SingleLinkList();

$link->addNode(new Node(1));

$link->addNode(new Node(2));

$link->insertNodeByIndex(3, new Node(3));

$link->addNode(new Node(4));

$link->addNode(new Node(5));

echo $link->getLength(), PHP_EOL;

$link->showNode();

echo '-----------', PHP_EOL;

var_dump($link->searchNodeByIndex(3));

echo '-----------', PHP_EOL;

$link->deleteNodeByIndex(3);

$link->showNode();

以上内容希望帮助到大家,很多PHPer在进阶的时候总会遇到一些问题和瓶颈,业务代码写多了没有方向感,不知道该从那里入手去提升,对此我整理了一些资料,包括但不限于:分布式架构、高可扩展、高性能、高并发、服务器性能调优、TP6,laravel,YII2,Redis,Swoole、Swoft、Kafka、Mysql优化、shell脚本、Docker、微服务、Nginx等多个知识点高级进阶干货需要的可以免费分享给大家,需要戳这里

php mysql 链表_php实现数据结构的单向链表相关推荐

  1. 数据结构 (二) ----- 单向链表双向链表

    相关文章: <数据结构 (一) ----- 数据结构基本概念&基于数组实现线性表> <数据结构 (二) ----- 单向链表&双向链表> 文章目录 单链表 一. ...

  2. Java版数据结构之单向链表 新增,有序新增的两种方式,修改和删除(CRUD)

    Java版数据结构之单向链表 CRUD Java版数据结构之单向链表 新增,有序新增的两种方式,修改和删除; 留了一个疑问; 我的代码仓库:https://github.com/zhuangbinan ...

  3. Java版数据结构之单向链表

    Java版数据结构之单向链表 我的代码仓库:https://github.com/zhuangbinan/datastructure package club.zhuangbinan.linkedli ...

  4. java数组转换成单链表_【转】单向链表(单链表)的Java实现

    最近被问到链表,是一个朋友和我讨论Java的时候说的.说实话,我学习编程的近一年时间里,学到的东西还是挺少的.语言是学了Java和C#,关 于Web的学了一点Html+css+javascript.因 ...

  5. 算法与数据结构(part6)--单向链表

    学习笔记,仅供参考,有错必纠 参考自:单链表头指针.头结点.头元结的辨析 文章目录 算法与数据结构–基于python 链表 为啥需要链表 什么是链表 单向链表 什么是单向链表 单列表的操作 节点的实现 ...

  6. 数据结构与算法java - 03 链表,单向链表,逆序打印单向链表

    链表 Linked List 有序 链表是以节点的方式来存储,链式存储 每个节点包含 data 域, next 域:指向下一个节点 链表的各个节点不一定是连续存放 链表分带头节点的链表和没有头节点的链 ...

  7. 数据结构入门——单向链表

    基本知识点 注:数据结构系列将持续更新,欢迎交流讨论- 单向链表是一种线性结构 优点:作数据的删除.插入简单:缺点:数据查找慢 组成:数据域.后继节点的一个指针域: 单向链表,后继指针指向下一个结点 ...

  8. Day 62 数据结构(单向链表,单向循环链表,双向链表)

    1. 单向链表的设计 例程:创建一个动态单向链表 1.定义链表结点:数据域+指针域 2.定义链表结构体:头结点指针+结点数 3.初始化链表 4.指定位置插入新数据 5.删除指定位置数据 6.获取链表长 ...

  9. 数据结构——求单向链表的倒数第K个节点

    首先,对于链表来说,我们不能像数组一样直接访问,所以我们想到要求倒数第K个节点首先要知道最后一个节点. 然后从最后一个节点往前数K个. 最后得到想要的值. 但是这是不对的,为什么呢?因为题目给出的是单 ...

最新文章

  1. 第六篇:并发-粒度锁
  2. 特斯拉CEO对自动驾驶发表预测,专家:别扰乱公众的认知了
  3. 什么是优秀管理者的第一课?【如何搞垮一个企业】
  4. 如何接地气地接入微前端?
  5. python模式选择符,Python设计模式之修饰器模式
  6. 关于html以及js相关格式验证的记录
  7. 物联网大数据平台软件开发架构案例解析
  8. Swift类属性 static
  9. 前端开发所需基本环境和软件配置
  10. 网络社区划分的算法分类
  11. 勒索病毒代码python_一份勒索病毒解密工具的整理汇总
  12. SQL Server_SQL Server Windows NT - 64 bit
  13. 神经网络的反向传播算法中矩阵的求导方法(矩阵求导总结)
  14. 个人中心网页设计html,超全面!个人中心页面从思考到设计全过程
  15. 小白刷LeeCode(算法篇)3
  16. 善用EFI系统分区ESP
  17. 外包四年太差劲,幡然醒悟要跳槽
  18. gravity 安装部署
  19. php对接AliGenie天猫精灵服务器控制智能硬件esp8266③ 渗入熟悉AliGenie 对接协议,揭开第三方云平台是如何让天猫精灵是发送消息到私有服务器的!
  20. 基于模拟退火算法改进粒子群SA-PSO优化shubert函数,测试函数shubert(十),MATLAB编程实现

热门文章

  1. PHP-代码审计-身份认证
  2. LeetCode Algorithm 897. 递增顺序搜索树
  3. 2018/Province_Java_C/3/字母阵列
  4. 2019年第十届蓝桥杯 - 省赛 - C/C++大学B组 - H. 等差数列
  5. 198. House Robber
  6. 智宇科技 ZYARJX-1机械臂智能小车 —— 手机端蓝牙控制程序
  7. 信息学奥赛一本通(C++)在线评测系统——基础(一)C++语言——1101:不定方程求解
  8. 大数据互联网架构阶段 Java爬虫
  9. bashrc文件实例
  10. 【Tools】gcc4.4升级到gcc4.8