zoukankan      html  css  js  c++  java
  • PHP实现栈(Stack)数据结构

    栈(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(弹栈)。

  • 相关阅读:
    Linux下架构高可用性网络----HA+LB+lvs
    MacBook如何用Parallels Desktop安装windows7/8
    Win10如何彻底禁用小娜?彻底禁用小娜的方法
    安卓手机微信发不出去怎么办 微信不能发信息怎么办
    计算机名、主机名、用户账户名与NetBIOS名有什么区别
    安装corel x8提示你已安装了另外一个版本
    ssh整合问题总结--在添加商品模块实现图片(文件)的上传
    代理设计模式之静态代理与动态代理(超..)详解
    Java基础--反射机制的知识点梳理
    ssh整合问题总结--运行项目时报java.lang.StackOverflowError(堆栈溢出)异常
  • 原文地址:https://www.cnblogs.com/dyllove98/p/3159598.html
Copyright © 2011-2022 走看看