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

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

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

  1. /*
  2. * 链表测试到辅助类
  3. */
  4.  
  5. final class Node {
  6.  
  7. public $data;
  8. public $next = null;
  9.  
  10. public function __construct($data) {
  11. $this->data = $data;
  12. }
  13.  
  14. }
  1. <?php
  2.  
  3. /*
  4. * 单向链表,注意是使用数组模拟单链表到特性,也可以理解为有单向链接到数组
  5. */
  6.  
  7. final class SinglyLinkedList {
  8.  
  9. protected $list = null;
  10.  
  11. // //从链表尾部压入一个节点,节点自动维护,不需要要像main方法那样自己维护
  12. public function push(Node $head, Node $Node) {
  13. $current = $head; //让$current指向$head;
  14. while ($current->next != null) {
  15. $current = $current->next;
  16. }
  17. $current->next = $Node->next;
  18. $current->next = $Node;
  19. }
  20.  
  21. //从链表尾压出一个节点
  22. public function pop(Node $head) {
  23. $current = $head; //让$current指向$head;
  24. while ($current->next != null) {
  25. //提前查找链表尾部是否为空,为空就是尾部,吧当前节点的next复制问NULL,就是尾部元素干掉
  26. if ($current->next->next == null) {
  27. break;
  28. }
  29. $current = $current->next;
  30. }
  31. $current->next = null;
  32. }
  33.  
  34. //非自动维护一个链表,只是单纯点组成一个链表
  35. public static function main() {
  36. $header = new Node(null);
  37.  
  38. $node1 = new Node(['id' => 2, 'name' => '李1']);
  39. $header->next = $node1;
  40.  
  41. $node2 = new Node(['id' => 5, 'name' => '李5']);
  42. $node1->next = $node2;
  43.  
  44. $node3 = new Node(['id' => 7, 'name' => '李7']);
  45.  
  46. $node2->next = $node3;
  47. pp($header);
  48.  
  49. self::getAllNode($header);
  50. }
  51.  
  52. public static function getAllNode($header) {
  53. $cur = $header;
  54. while ($cur->next != null) {
  55. $cur = $cur->next;
  56. p($cur->data);
  57. }
  58. }
  59.  
  60. }

测试

  1. //单链表
  2. $head = new Node([]);
  3.  
  4. $SinglyLinkedList = new SinglyLinkedList();
  5. $node1 = new Node(['id' => 2, 'name' => '李1']);
  6. $SinglyLinkedList->push($head, $node1);
  7.  
  8. //pp($SinglyLinkedList->getList());
  9. $node2 = new Node(['id' => 5, 'name' => '李5']);
  10. $SinglyLinkedList->push($head, $node2);
  11.  
  12. $node3 = new Node(['id' => 7, 'name' => '李7']);
  13. $SinglyLinkedList->push($head, $node3);
  14.  
  15. $SinglyLinkedList->pop($head);
  16. pp($head);

PHP算法学习(6) 单向链表 实现栈的更多相关文章

  1. 学点PYTHON基础的东东--数据结构,算法,设计模式---单向链表

    看来看来,还是以下这个实现最优雅.. 其它的,要么NODE冗余,要么初始化丑陋... #!/usr/bin/env python # -*- coding: utf-8 -*- class Node: ...

  2. Java数据结构和算法(七)——链表

    前面博客我们在讲解数组中,知道数组作为数据存储结构有一定的缺陷.在无序数组中,搜索性能差,在有序数组中,插入效率又很低,而且这两种数组的删除效率都很低,并且数组在创建后,其大小是固定了,设置的过大会造 ...

  3. 数据结构(1) 第一天 算法时间复杂度、线性表介绍、动态数组搭建(仿Vector)、单向链表搭建、企业链表思路

    01 数据结构基本概念_大O表示法 无论n是多少都执行三个具体步骤 执行了12步 O(12)=>O(1) O(n) log 2 N = log c N / log c N (相当于两个对数进行了 ...

  4. C语言 - 基础数据结构和算法 - 单向链表

    听黑马程序员教程<基础数据结构和算法 (C版本)>,照着老师所讲抄的, 视频地址https://www.bilibili.com/video/BV1vE411f7Jh?p=1 喜欢的朋友可 ...

  5. 笔试题&amp;面试题:设计一个复杂度为n的算法找到单向链表倒数第m个元素

    设计一个复杂度为n的算法找到单向链表倒数第m个元素.最后一个元素假定是倒数第0个. 提示:双指针查找 相对于双向链表来说,单向链表仅仅能从头到尾依次訪问链表的各个节点,所以假设要找链表的倒数第m个元素 ...

  6. C#学习单向链表和接口 IList<T>

    C#学习单向链表和接口 IList<T> 作者:乌龙哈里 时间:2015-11-04 平台:Window7 64bit,Visual Studio Community 2015 参考: M ...

  7. Python手写模拟单向链表对象,栈对象和树

    单向链表: class error(Exception): def __init__(self,msg): super(error,self).__init__() self.msg=msg def ...

  8. 数据结构和算法之单向链表二:获取倒数第K个节点

    我们在做算法的时候或多或少都会遇到这样的问题,那就是我们需要获取某一个数据集的倒数或者正数第几个数据.那么今天我们来看一下这个问题,怎么去获取倒数第K个节点.我们拿到这个问题的时候自然而然会想到我们让 ...

  9. Java 单向链表学习

    Java 单向链表学习 链表等同于动态的数组:可以不同设定固定的空间,根据需要的内容动态的改变链表的占用空间和动态的数组同一形式:链表的使用可以更加便于操作. 链表的基本结构包括:链表工具类和节点类, ...

随机推荐

  1. 人工智能-调百度AI接口+图灵机器人

    1.登陆百度AI的官网 1.注册:没有账号注册 2.创建应用 3.创建应用 4.查看应用的ID 5.Python代码 from aip import AipSpeech APP_ID = " ...

  2. IIS短文件漏洞(搬运整理)

    0x01. IIS短文件漏洞的由来 Microsoft IIS 短文件/文件夹名称信息泄漏最开始由Vulnerability Research Team(漏洞研究团队)的Soroush Dalili在 ...

  3. Python Day2 (二)

    字典的操作: 见连接: http://www.cnblogs.com/alex3714/articles/5717620.html 第二天作业,修改haproxy配置文件. 程序练习 程序1: 实现简 ...

  4. django第三天

    从后台传入一层的字典数据 后台代码 前台代码一 浏览器结果 前台代码二 前台代码三 前台代码四 注意 默认遍历为KEY .values    .keys   .items 都不加括号

  5. python第10天(上)

    multiprocessing包是Python中的多进程管理包.与threading.Thread类似,它可以利用multiprocessing.Process对象来创建一个进程.该进程可以运行在Py ...

  6. ==、Equals 、ReferenceEquals它们的异同

    链接 string foobar = "foobar"; string foobar2 = new StringBuilder().Append("foo"). ...

  7. CAP分布式事务 学习及简单demo

    完全参考 github的指导 demo地址, Pub使用 efcore , Sub 使用 dapper, mysql数据库 https://files.cnblogs.com/files/xtxtx/ ...

  8. Git一些简单但非常重要并常用的操作命令

    1.将本地与github进行关联配置 生成公钥 ssh-keygen -t rsa -C "jiasheng.mei@hpe.com" 将公钥拷贝到github中 在公钥同文件夹( ...

  9. [转]Windows下安装storm-0.9.1

    来源:https://www.cnblogs.com/liuruitao/p/4669657.html Windows下安装storm-0.9.1的详细步骤如下: 1.确定已经正确安装JDK1.6或J ...

  10. Vue前端利用qrcode生成二维码

    <div id="qrcode" style="width: 560px;height: 560px;background-color: white;"& ...