svn地址:svn://gitee.com/zxadmin/live_z

这个是模拟栈的先进后出的一个链表操作,自动维护链表,当然你也使用SPL的栈

测试版本php 5.4 ,5.6,7.0,7.2

/** 链表测试到辅助类*/final class Node {public $data;public $next = null;public function __construct($data) {$this->data = $data;}}

<?php/** 单向链表,注意是使用数组模拟单链表到特性,也可以理解为有单向链接到数组*/final class SinglyLinkedList {protected $list = null;//    //从链表尾部压入一个节点,节点自动维护,不需要要像main方法那样自己维护public function push(Node $head, Node $Node) {$current = $head; //让$current指向$head;while ($current->next != null) {$current = $current->next;}$current->next = $Node->next;$current->next = $Node;}//从链表尾压出一个节点public function pop(Node $head) {$current = $head; //让$current指向$head;while ($current->next != null) {//提前查找链表尾部是否为空,为空就是尾部,吧当前节点的next复制问NULL,就是尾部元素干掉if ($current->next->next == null) {break;}$current = $current->next;}$current->next = null;}//非自动维护一个链表,只是单纯点组成一个链表public static function main() {$header = new Node(null);$node1 = new Node(['id' => 2, 'name' => '李1']);$header->next = $node1;$node2 = new Node(['id' => 5, 'name' => '李5']);$node1->next = $node2;$node3 = new Node(['id' => 7, 'name' => '李7']);$node2->next = $node3;pp($header);self::getAllNode($header);}public static function getAllNode($header) {$cur = $header;while ($cur->next != null) {$cur = $cur->next;p($cur->data);}}}

测试

//单链表
$head = new Node([]);$SinglyLinkedList = new SinglyLinkedList();
$node1 = new Node(['id' => 2, 'name' => '李1']);
$SinglyLinkedList->push($head, $node1);//pp($SinglyLinkedList->getList());
$node2 = new Node(['id' => 5, 'name' => '李5']);
$SinglyLinkedList->push($head, $node2);$node3 = new Node(['id' => 7, 'name' => '李7']);
$SinglyLinkedList->push($head, $node3);$SinglyLinkedList->pop($head);
pp($head);

转载于:https://www.cnblogs.com/zx-admin/p/10373866.html

PHP算法学习(6) 单向链表 实现栈相关推荐

  1. 数据结构与算法之反转单向链表和双向链表

    数据结构与算法之反转单向链表和双向链表 目录 反转单向链表和双向链表 1. 反转单向链表和双向链表 题目描述 代码实现 public class Code_ReverseList {public st ...

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

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

  3. 算法相关(2)-单向链表

    单向链表 创建单向链表 //节点的构造函数 function Node(value){this.value=value;this.next=null; }//单向链表的构造函数 function Li ...

  4. 算法—详细讲解单向链表的实现(python)

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

  5. 算法章节 数组、链表、栈、队列

    数组 概念与特性 1,数组是线性表,用一组连续的内存空间存储⼀组具有相同类型的数据 2,最大的特性是⽀持按照下标O(1)时间复杂度内快速访问数组元素 3,⼀维数组寻址公式:a[i]_addr = ba ...

  6. 算法详解——单向链表反转

    一.问题描述 定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点. 二.分析问题 1.递归法 首先来考虑两个节点的基本情况,假设链表head有两个节点,只需要让head->n ...

  7. 算法学习之路|链表元素分类

    给定一个单链表,请编写程序将链表元素进行分类排列,使得所有负值元素都排在非负值元素的前面,而[0, K]区间内的元素都排在大于K的元素前面.但每一类内部元素的顺序是不能改变的.例如:给定链表为 18→ ...

  8. 转:C#数据结构和算法学习系列十三----链表

    链表是被称为节点的类对象的群集.每一个节点通过一个引用链接到列表 内的后继节点上.节点包括存储数据的字段和节点引用的字段.到另外一个节点的引用被称为是链接.数组和链表之间的一个主要区别就是数组内的元素 ...

  9. 一步一步写算法(之单向链表)

    [ 声明:版权所有,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com] 有的时候,处于内存中的数据并不是连续的.那么这时候,我们就需要在数据结构中添加一个属性,这个属 ...

最新文章

  1. 小白给小白详解维特比算法(二)
  2. GPT-3等三篇论文获NeurIPS2020最佳论文奖 | AI日报
  3. 面向对象程序设计课程进度条
  4. 解决 Idea 卡在 Resolving Maven dependencies ...
  5. bzoj4415 [Shoi2013]发牌 线段树
  6. MVC-通过对象获取整个表单内容
  7. 怎么调整矩形边框宽度_PKPM:梁刚度放大通过放大系数与矩形梁转T形梁的区别...
  8. Android学习JNI,使用JNI实现字符串加密
  9. 安卓饼状图设置软件_android开源图表库MPAndroidChart(曲线图、直方图、饼状图)...
  10. p6s与onvif_大华的录像机添加海康摄像头,使用了onvif协议,为啥也添加不进去?...
  11. adc 测试软件,ADC芯片参数测试技术解析
  12. aria2 linux 编译,Centos 7 编译安装Aria2
  13. 关于问答系统(QA)、对话系统(Chatbot)的学与思
  14. SLAM十四讲第三讲实践:useGeometry------小白强行读代码
  15. PHP网页文件扩展名,网页文件的扩展名有哪些
  16. 通过Excel表格批量生成汉信码
  17. C语言高级部分总结,也是面试官会经常问的问题哦~
  18. 服务器操作系统查询命令,服务器操作系统查询命令
  19. kvmla openvz 评测
  20. C++ OpenCV 基于HSV颜色分割区域、获取目标

热门文章

  1. java三目运算符嵌套_替代JS中的嵌套三元运算符
  2. java udp 接收不定长_JAVA UDP通信为什么只能接收一次数据,我想要时刻接收数据,并更新UI,大神们帮我看看程序吧?...
  3. python seach_python 正则re.search
  4. mysql 昨天日期_MySQL 日期函数 今天明天昨天......
  5. BZOJ4205卡牌配对——最大流+建图优化
  6. Get全栈技能点 Vue2.0 / Node.js / MongoDB 打造商城系统
  7. 喵哈哈村的魔法考试 Round #10 (Div.2) B
  8. [转] 微信小程序 页面跳转 传递参数
  9. 我的开发框架(WinForm)
  10. 推荐安装的Visual Studio Extensions