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);

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. 后台挂载/卸载程序[Linux/Windows]

    后台挂载应用程序 即使关闭掉控制台窗口,该程序的进程也将会一直运行下去 #Windows 1.编写bat命令文件[形如:a.bat] 2.cmd执行:start /b a.bat #Linux noh ...

  2. 再说C模块的编写(1)

    [前言] 在<Lua“控制”C>中对Lua调用C函数做了初步的学习,而这篇才是重中之重,这篇文章会重点的总结C模块编写过程中遇到的一些问题,比如数组操作.字符串操作和C函数的状态保存等问题 ...

  3. RTF文件格式

    文档地址 首先给出一个生成最简单的RTF文件的脚本 f=open('hello_world.rtf','w') padding='{\\rtf1\\ansi' padding+=' Hello Wor ...

  4. 关于Activity生命周期的总结

    1.Acitivity的四种状态 (1)运行:位于Activity栈顶,用户可见,可获得焦点. (2)暂停:如果一个活动被另一个非全屏的活动所覆盖(比如一个Dialog),那么该活动就失去了焦点,它将 ...

  5. noj算法 堡垒问题 回溯法

    描述: 城堡是一个4×4的方格,为了保卫城堡,现需要在某些格子里修建一些堡垒.城堡中的某些格子是墙,其余格子都是空格,堡垒只能建在空格里,每个堡垒都可以向上下左右四个方向射击,如果两个堡垒在同一行或同 ...

  6. 【Python selenium自动化环境配置】4步搞定ChromeDriver版本选择

    很多刚做自动化的小伙伴,会在ChromeDriver版本选择时犯难,看来大家都被坑过,真正掌握独门绝技,都不是难事儿. 看好了主要步骤就4部 1.确定谷歌浏览器版本 2.找到谷歌浏览器版本与Chrom ...

  7. mybatis 查询单个对象,结果集类型一定要明确

    简单介绍:用ssm框架已经有很长时间了,但是似乎从来都没有对于查询单个对象,存在问题的,好像也就是那回事,写完sql就查出来了,也从来都没有认真的想过,为什么会这样,为什么要设置结果集类型 代码: / ...

  8. Java:Spring @Transactional工作原理

    本文将深入研究Spring的事务管理.主要介绍@Transactional在底层是如何工作的.之后的文章将介绍: propagation(事务传播)和isolation(隔离性)等属性的使用 事务使用 ...

  9. 服务器启动socket服务报错 java.net.BindException:Cannot assign requested address

    错误信息:  2017-06-13 11:18:00,865 [GateServer.java:82][ERROR]:启动服务出错了java.net.BindException: Cannot ass ...

  10. 金蝶k/3 K3云之家消息查询发送是否成功SQL语句

    金蝶k/3 K3云之家消息查询发送是否成功SQL语句 1是成功,0是还在轮询中未发送,4是发送失败 select * into #tempUserID from ( union select t_Gr ...