栈(Stack),是一种特殊的后进先出线性表,其只能在一端进行插入(插入一般称为压栈、进栈或入栈)和删除(删除一般称为弹栈、退栈或出栈)操作,允许进行插入和删除操作的一端称为栈顶,另一端则称为栈底。栈,按照后进先出的原则存储数据,先进入的数据被压入栈底,后进入的数据则在栈顶,需要读取数据的时候,从栈顶开始弹出数据。当栈中没有元素时,称为空栈。

数据结构与算法(PHP实现) - 栈(Stack)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
<?php
/**
  * 数据结构与算法(PHP实现) - 栈(Stack)。
  *
  * @author 创想编程(TOPPHP.ORG)
  * @copyright Copyright (c) 2013 创想编程(TOPPHP.ORG) All Rights Reserved
  * @license http://www.opensource.org/licenses/mit-license.php MIT LICENSE
  * @version 1.0.0 - Build20130607
  */
class Stack {
   /**
    * 栈。
    *
    * @var array
    */
   private $stack ;
 
   /**
    * 栈的长度。
    *
    * @var integer
    */
   private $size ;
 
   /**
    * 构造方法 - 初始化数据。
    */
   public function __construct() {
     $this ->stack = array ();
     $this ->size = 0;
   }
 
   /**
    * 压栈(进栈、入栈)操作。
    *
    * @param mixed $data 压栈数据。
    * @return object 返回对象本身。
    */
   public function push( $data ) {
     $this ->stack[ $this ->size++] = $data ;
 
     return $this ;
   }
 
   /**
    * 弹栈(退栈、出栈)操作。
    *
    * @return mixed 空栈时返回FALSE,否则返回栈顶元素。
    */
   public function pop() {
     if (! $this ->isEmpty()) {
       $top = array_splice ( $this ->stack, -- $this ->size, 1);
 
       return $top [0];
     }
 
     return FALSE;
   }
 
   /**
    * 获取栈。
    *
    * @return array 返回栈。
    */
   public function getStack() {
     return $this ->stack;
   }
 
   /**
    * 获取栈顶元素。
    *
    * @return mixed 空栈时返回FALSE,否则返回栈顶元素。
    */
   public function getTop() {
     if (! $this ->isEmpty()) {
       return $this ->stack[ $this ->size - 1];
     }
 
     return FALSE;
   }
 
   /**
    * 获取栈的长度。
    *
    * @return integer 返回栈的长度。
    */
   public function getSize() {
     return $this ->size;
   }
 
   /**
    * 检测栈是否为空。
    *
    * @return boolean 空栈则返回TRUE,否则返回FALSE。
    */
   public function isEmpty() {
     return 0 === $this ->size;
   }
}
?>
示例代码
1
2
3
4
5
6
7
8
<?php
$stack = new Stack();
$stack ->push(1)->push(2)->push(3)->push(4)->push(5)->push(6);
echo '<pre>' , print_r( $stack ->getStack(), TRUE), '</pre>' ;
 
$stack ->pop();
echo '<pre>' , print_r( $stack ->getStack(), TRUE), '</pre>' ;
?>

说明:PHP数组函数已有类似栈的功能函数存在:array_push(压栈)和、array_pop(弹栈)。

PHP实现栈(Stack)数据结构的更多相关文章

  1. 【Java数据结构学习笔记之二】Java数据结构与算法之栈(Stack)实现

      本篇是java数据结构与算法的第2篇,从本篇开始我们将来了解栈的设计与实现,以下是本篇的相关知识点: 栈的抽象数据类型 顺序栈的设计与实现 链式栈的设计与实现 栈的应用 栈的抽象数据类型   栈是 ...

  2. 数据结构11: 栈(Stack)的概念和应用及C语言实现

    栈,线性表的一种特殊的存储结构.与学习过的线性表的不同之处在于栈只能从表的固定一端对数据进行插入和删除操作,另一端是封死的. 图1 栈结构示意图 由于栈只有一边开口存取数据,称开口的那一端为“栈顶”, ...

  3. Python与数据结构[1] -> 栈/Stack[0] -> 链表栈与数组栈的 Python 实现

    栈 / Stack 目录 链表栈 数组栈 栈是一种基本的线性数据结构(先入后出FILO),在 C 语言中有链表和数组两种实现方式,下面用 Python 对这两种栈进行实现. 1 链表栈 链表栈是以单链 ...

  4. 数据结构与算法:栈(Stack)的实现

    栈在程序设计当中是一个十分常见的数据结构,它就相当于一个瓶子,可以往里面装入各种元素,最先装进这个瓶子里的元素,要把后装进这个瓶子里的全部元素拿出来完之后才能够把他给拿出来.假设这个瓶子在桌上平放,左 ...

  5. 数据结构之栈(Stack)

    什么是栈(Stack) 栈是一种遵循特定操作顺序的线性数据结构,遵循的顺序是先进后出(FILO:First In Last Out)或者后进先出(LIFO:Last In First Out). 比如 ...

  6. C#创建安全的栈(Stack)存储结构

    在C#中,用于存储的结构较多,如:DataTable,DataSet,List,Dictionary,Stack等结构,各种结构采用的存储的方式存在差异,效率也必然各有优缺点.现在介绍一种后进先出的数 ...

  7. struts2值栈内部数据结构详解

    值栈是struts2内部一片很重要的区域,我在初学的时候,发现对于值栈这个数据结构的理解不是很深刻.例如OGNLContext是什么,ActionContext和值栈有什么关系.为什么ActionCo ...

  8. 堆heap和栈Stack(百科)

    堆heap和栈Stack 在计算机领域,堆栈是一个不容忽视的概念,堆栈是两种数据结构.堆栈都是一种数据项按序排列的数据结构,只能在一端(称为栈顶(top))对数据项进行插入和删除.在单片机应用中,堆栈 ...

  9. 栈stack(1):栈的数组实现

    定义 栈(stack),是一个只允许在表尾端进行删除插入操作的线性表,是一种后进先出(LIFO,last in first out)的数据结构. 因此,对于栈来说,我们规定进行删除插入操作的表尾端称为 ...

  10. Java中堆(heap)和栈(stack)的区别

    简单的说: Java把内存划分成两种:一种是栈内存,一种是堆内存. 在函数中定义的一些基本类型的变量和对象的引用变量都在函数的栈内存中分配. 当在一段代码块定义一个变量时,Java就在栈中为这个变量分 ...

随机推荐

  1. WM_PAINT与WM_ERASEBKGND(用户操作和API这两种情况产生消息的顺序有所不同)

    1)当WM_PAINT不是由InvalidateRect产生时,即由最大化,最小化等产生时,或者移动产生(移动有时只会产生WM_ERASEBKGND消息)系统先发送WM_ERASEBKGND消息,再发 ...

  2. boost.asio系列——io_service

    IO模型 io_service对象是asio框架中的调度器,所有异步io事件都是通过它来分发处理的(io对象的构造函数中都需要传入一个io_service对象). asio::io_service i ...

  3. SqlHelper初探之二

    在上一篇简单的介绍了sqlhelper的基本知识,接下来就让我们进一步学习他的实践过程. 首先:我们要明白的一件事Sqlhelper不是写出来的,而是在D层的代码中提炼出来的?那么就会反问一句“D层中 ...

  4. [Unity3D]Unity3D发展偷看游戏初期阶段NGUI

    朋友,大家晚上好. 我是秦培.欢迎关注我的博客,我的博客地址blog.csdn.net/qinyuanpei.近期博主開始研究NGUI了,由于NGUI是Unity3D中最为流行的界面插件,所以不管从学 ...

  5. CImage类

    CImage封装了DIB(设备无关位图)的功能,因而可以让我们能够处理每个位图像素.这里介绍GDI+和CImage的一般使用方法和技巧. TAG: GDI  CImage  后处理   我们知道,Vi ...

  6. 内网穿透神器ngrok(转)

    相信做Web开发的同学们,经常会遇到需要将本地部署的Web应用能够让公网环境直接访问到的情况,例如微信应用调试.支付宝接口调试等.这个时候,一个叫ngrok的神器可能会帮到你,它提供了一个能够在公网安 ...

  7. Android installed app, never used, cannot receiver BroadcastReceiver

    官方文档是这么写的:(http://developer.android.com/about/versions/android-3.1.html#launchcontrols) Launch contr ...

  8. 基于飞思卡尔i.MX 6Quad Sabrelite开发板的触摸屏调试

    1      概述 本次任务是在飞思卡尔i.MX 6Quqd Sabrelite开发板上调试触屏驱动,触屏芯片是Goodix的gt828芯片,触屏接口是I2C. 操作系统:android 4.0.4 ...

  9. 空间参考系统与WKT解析

    空间参考系统与WKT解析 1.为什么要空间参考系统? 空间参考系统,也称为坐标系统.在GIS中为地理数据定位的基准,假设给你一个坐标(442281.875,4422651.589).如果不给你空间参考 ...

  10. [docker]coreOS与atomic对照

    声明: 本博客欢迎转发,但请保留原作者信息! 博客地址:http://blog.csdn.net/halcyonbaby 内容系本人学习.研究和总结,如有雷同,实属荣幸! 摘自https://majo ...