算法笔记-PHP实现栈的操作
<?php
class StackOnLinkedList
{
/**
* 头指针
*
* @var SingleLinkedListNode
*/
public $head; /**
* 栈长度
*
* @var
*/
public $length; /**
*
* StackOnLinkedList constructor.
*/
public function __construct()
{
$this->head = new SingleLinkedListNode();
$this->length = ;
} /**
* 出栈
*
* @return bool
*/
public function pop()
{
if ( == $this->length) {
return false;
} $this->head->next = $this->head->next->next;
$this->length--; return true;
} /**
* 入栈
*
* @param $data
*
* @return SingleLinkedListNode|bool
*/
public function push($data)
{
return $this->pushData($data);
} /**
* 入栈 node
*
* @param SingleLinkedListNode $node
*
* @return bool
*/
public function pushNode(SingleLinkedListNode $node)
{
if (null == $node) {
return false;
} $node->next = $this->head->next;
$this->head->next = $node; $this->length++;
return true;
} /**
* 入栈 data
*
* @param $data
*
* @return SingleLinkedListNode|bool
*/
public function pushData($data)
{
$node = new SingleLinkedListNode($data); if (!$this->pushNode($node)) {
return false;
} return $node;
} /**
* 获取栈顶元素
*
* @return SingleLinkedListNode|bool|null
*/
public function top()
{
if ( == $this->length) {
return false;
} return $this->head->next;
} /**
* 打印栈
*/
public function printSelf()
{
if ( == $this->length) {
echo 'empty stack' . PHP_EOL;
return;
} echo 'head.next -> ';
$curNode = $this->head;
while ($curNode->next) {
echo $curNode->next->data . ' -> '; $curNode = $curNode->next;
}
echo 'NULL' . PHP_EOL;
} /**
* 获取栈长度
*
* @return int
*/
public function getLength()
{
return $this->length;
} /**
* 判断栈是否为空
*
* @return bool
*/
public function isEmpty()
{
return $this->length > ? false : true;
}
}
调用示例:
$stack = new StackOnLinkedList();
$stack->pushData();
$stack->pushData();
$stack->pushData();
$stack->pushData();
var_dump($stack->getLength());
$stack->printSelf(); $topNode = $stack->top();
var_dump($topNode->data); $stack->pop();
$stack->printSelf();
$stack->pop();
$stack->printSelf(); var_dump($stack->getLength()); $stack->pop();
$stack->pop();
$stack->printSelf();
运行结果:

算法笔记-PHP实现栈的操作的更多相关文章
- 算法笔记-PHP实现队列的操作
[队列]先进者先出,这就是典型的“队列”. 最基本的两个操作:入队enqueue(),放一个数据到队列尾部:出队dequeue(),从队列头部取一个元素.队列可以用数组或者链表实现,用 ...
- 算法笔记_064:蓝桥杯练习 操作格子(Java)
目录 1 问题描述 2 解决方案 1 问题描述 问题描述 有n个格子,从左到右放成一排,编号为1-n. 共有m次操作,有3种操作类型: 1.修改一个格子的权值, 2.求连续一段格子权值和, 3.求 ...
- 算法笔记(c++)--使用一个辅助栈排列另一个栈
算法笔记(c++)--使用一个辅助栈排列另一个栈 仅仅使用一个辅助栈,不使用其他数据结构来排列一个栈,要求,上大下小. 分析下.肯定是先吧主栈中的数据都放到辅助栈中,在辅助栈中上小下大. 1.首先循环 ...
- 算法笔记——C/C++语言基础篇(已完结)
开始系统学习算法,希望自己能够坚持下去,期间会把常用到的算法写进此博客,便于以后复习,同时希望能够给初学者提供一定的帮助,手敲难免存在错误,欢迎评论指正,共同学习.博客也可能会引用别人写的代码,如有引 ...
- 学习Java 以及对几大基本排序算法(对算法笔记书的研究)的一些学习总结(Java对算法的实现持续更新中)
Java排序一,冒泡排序! 刚刚开始学习Java,但是比较有兴趣研究算法.最近看了一本算法笔记,刚开始只是打算随便看看,但是发现这本书非常不错,尤其是对排序算法,以及哈希函数的一些解释,让我非常的感兴 ...
- kNN算法笔记
kNN算法笔记 标签(空格分隔): 机器学习 kNN是什么 kNN算法是k-NearestNeighbor算法,也就是k邻近算法.是监督学习的一种.所谓监督学习就是有训练数据,训练数据有label标好 ...
- 算法笔记_023:拓扑排序(Java)
目录 1 问题描述 2 解决方案 2.1 基于减治法实现 2.2 基于深度优先查找实现 1 问题描述 给定一个有向图,求取此图的拓扑排序序列. 那么,何为拓扑排序? 定义:将有向图中的顶点以线性方式进 ...
- 算法笔记_071:SPFA算法简单介绍(Java)
目录 1 问题描述 2 解决方案 2.1 具体编码 1 问题描述 何为spfa(Shortest Path Faster Algorithm)算法? spfa算法功能:给定一个加权连通图,选取一个 ...
- CornerNet-Lite算法笔记
论文名称:CornerNet-Lite: Efficient Keypoint Based Object Detection 论文链接:https://arxiv.org/abs/1904.08900 ...
随机推荐
- Matlab 瑞利信道仿真
转眼间三月都已经过去一半,一直找不到有什么可以写的,一直想等自己把LTE仿真平台搭好后,再以连载的形式记录下来.但是,后来一想,我必须先做好充分的铺垫,在这过程中也遇到了很多问题,及时留下点什么,也是 ...
- 使用SpringContextHolder获取bean实例
public static IConstantFactory me(){ return SpringContextHolder.getBean(beanName:"constantFacto ...
- MySQL备份恢复工具Xtrabackup
参考文档https://www.cnblogs.com/youkanyouxiao/p/8335173.html Xtrabackup介绍 Xtrabackup是由percona开源的免费数据库热备 ...
- 运行gedit报No protocol specified
No protocol specifiedxhost: unable to open display ":0" 这是因为在Xserver默认情况下,不允许Linux非当前登录用户( ...
- [No0000187]可能是把Java内存区域讲的最清楚的一篇文章
写在前面(常见面试题) 基本问题: 介绍下 Java 内存区域(运行时数据区) Java 对象的创建过程(五步,建议能默写出来并且要知道每一步虚拟机做了什么) 对象的访问定位的两种方式(句柄和直接指针 ...
- CSS3 transform 属性
CSS3 transform 属性 语法: transform: none|transform-functions; 值 描述 none 定义不进行转换. matrix(n,n,n,n,n,n) 定义 ...
- 一道hive SQL面试题
一.hive中实现方法 基表: 组表: gt gid gname 1001 g1 1002 g2 1003 g3 create table g( gid int, gname string )ro ...
- windows hook 钩子
windows hook 钩子 场景: 1.打印机 Ctrl+P弹出支付窗口,付款成功后打印
- [linux] 对一个虚拟机的研究
今天拿到了一个vmware的虚拟机硬盘镜像,是其他公司的演示产品. 启动之后是带着ubuntu字样的grub.进入系统之后也不是shell,而是一个定制的命令行.所以如果想了解细节的话,只能单独挂硬盘 ...
- git知识点
先说几个名词 未被追踪的文件:指的是新建的文件或文件夹且还没加入到暂存区(新建的还没有被git add 过得) 未加入到暂存区的文件:指的是已经被追踪过,但是没有加入到暂存区(已经执行过git add ...