链表的结构是由一个一个节点组成的,所谓链,就是每个节点的头尾连在一起。而单向链表就是:每个节点包含了当前节点的值和下一个节点引用。双向链表就是每个节点包含了当前节点的值和上下两个节点的引用。相对于数组结构,链表的增删效率会更加高。

单向链表(示意图):

PHP代码实现

/**

* 链表结构

*/

class Hero{

public $no;

public $name;

public $next=null;

public function __construct($no=null,$name=null){

$this->no = $no;

$this->name = $name;

}

}

/**

* 链表操作

*/

class SingleLink{

/**

* 添加节点

*/

public function addNode($head,$node)

{

$insertNode = $head;

$afterNode = null;// 插入节点的后续节点

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

if ($node->no < $insertNode->next->no){

$afterNode = $insertNode->next;

break;

}elseif($node->no == $insertNode->next->no){

throw new \Exception('排名 '.$node->no.' 节点已存在!');

}

$insertNode = $insertNode->next;

}

if( $afterNode ){// 将后续节点拼接到当前插入节点的后面

$node->next = $afterNode;

}

$insertNode->next = $node;

}

/**

* 删除节点

*/

public function delNode($head,$no)

{

$currentNode = $head;

$prevNode = $head;

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

$currentNode = $currentNode->next;

if( $currentNode->no==$no ){

$prevNode->next = $currentNode->next;

break;

}

$prevNode = $currentNode;

}

}

/**

* 显示节点

*/

public function showNode($head)

{

$currentNode = $head;

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

$currentNode = $currentNode->next;

echo '第 '.$currentNode->no.' 名:'.$currentNode->name."
";

}

}

}

//创建一个head头,该head 只是一个头,不放入数据

$head = new Hero();

$heroList = new SingleLink();

$hero_01 = new Hero(1,'宋江');

$hero_02 = new Hero(2,'卢俊义');

$hero_03 = new Hero(3,'公孙胜');

$hero_04 = new Hero(4,'吴用');

$hero_05 = new Hero(5,'关胜');

$hero_06 = new Hero(6,'林冲');

$heroList->addNode($head, $hero_01);

$heroList->addNode($head, $hero_03);

$heroList->addNode($head, $hero_02);

$heroList->addNode($head, $hero_05);

$heroList->addNode($head, $hero_04);

$heroList->addNode($head, $hero_06);

//$heroList->addNode($head, $hero_02);

$heroList->showNode($head);

echo "
";

$heroList->delNode($head,3);

$heroList->delNode($head,5);

$heroList->showNode($head);

参考:

韩顺平PHP程序员玩转算法公开课

https://www.cnblogs.com/Starshot/p/6918569.html

https://blog.csdn.net/silent123go/article/details/52693735

php链表构造,用PHP实现单向链表结构相关推荐

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

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

  2. 链表问题5——反转部分单向链表

    题目 给定一个单向链表的头节点head,以及两个整数from和to,在单向链表上把第from个节点到第to个节点这一部分进行反转. 输入 调整结果为 1->2->3->4->5 ...

  3. 单链表的创建示意图, 显示单向链表的分析

    SingleLinkedListDemo.java package com.dym.linkedlist;import java.util.Stack;public class SingleLinke ...

  4. php mysql 链表_php实现数据结构的单向链表

    啥是单向链表 链表是以链式存储数据的结构,其不需要连续的存储空间,链表中的数据以节点来表示,每个节点由元素(存储数据)和指针(指向后继节点)组成. 单向链表(也叫单链表)是链表中最简单的一种形式,每个 ...

  5. (C++版)链表(一)——实现单向链表创建、插入、删除等相关操作

    http://blog.csdn.net/fisherwan/article/details/25557545 前段时间用C语言实现了链表的相关操作,但是发现当时挺清楚的,过了一段时间又忘的差不多了, ...

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

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

  7. 结构与算法(03):单向链表和双向链表

    本文源码:GitHub·点这里 || GitEE·点这里 一.链表简介 1.链表概念 链表是一种物理存储单元上非连续.非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的.链表由一系列 ...

  8. java 快速从树节点找到数据_数据结构与算法:单向链表和双向链表

    一.链表简介 1.链表概念 链表是一种物理存储单元上非连续.非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的.链表由一系列节点组成,节点可以在运行时动态生成,节点包括两个部分:一个 ...

  9. 长风破浪会有时:单向链表、双向链表和循环链表图文解析

    链表的种类有很多.我们常常会用到的链表有:单向链表.双向链表和循环链表. 链表不同于数组的地方在于:它的物理存储结构是非连续的,也就是说链表在内存中不是连续的,并且无序.它是通过数据节点的互相指向实现 ...

最新文章

  1. java8 collect 类型转换_java8新特性之list转换
  2. 2021.01.29 Visual QA论文阅读
  3. python中xlwt的局限,Python xlwt 生成Excel和设置特定单元格不可编辑
  4. 使用Gitolite搭建Gitserver
  5. 使用mysqldump 导出sql数据
  6. 自治区计算机一级,新疆自治区计算机一级考试题库及答案
  7. C++程序设计:原理与实践(进阶篇)15.4 链表
  8. MFC通过窗口名字(caption的内容)查找窗口,并将其隐藏或者置顶显示
  9. python求职者的建议_Python 求职和建议-从认识自己出发
  10. TCP / IP攻击:ARP缓存中毒的基本原理、TCP序列号预测和TCP重置攻击
  11. RocketMQ如何应对每天1500亿条的数据处理
  12. 工业AI落地场景案例实战,飞桨EasyDL让工业更智能
  13. LuoguP4568 分层图
  14. 加载mysql的jdbc驱动_JDBC驱动加载
  15. 番茄社区门店系统新增跑腿和空码功能
  16. adb shell 获取手机分辨率
  17. HTV-VIVE 连接 PC端 720云
  18. 云服务器系统esxi,云服务器安装esxi
  19. LCD液晶屏连接方式有哪些呢及各自优缺点是什么?
  20. 戴尔微型计算机进bois,dell进bios按什么键 戴尔进bios的方法

热门文章

  1. zoj 1372
  2. ios 简单的倒计时验证码数秒过程实现
  3. linux ext4,ext3的特点和区别
  4. C++ Hash表模板
  5. 填写数独 洛谷P1784
  6. mysql之查询排序
  7. 【源码解读】EOS测试插件:txn_test_gen_plugin.cpp
  8. 写了个关于tomcat项目部署脚本 shell
  9. 提高MySQL数据库查询效率的几个技巧(转载)
  10. VS2010下安装Cocos2dx完整教程(原)