php栈链表,PHP算法学习(6) 单向链表 实现栈

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;

}

}

/*

* 单向链表,注意是使用数组模拟单链表到特性,也可以理解为有单向链接到数组

*/

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Java 单向链表学习

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

图解堆算法、链表、栈与队列(Mark)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值