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

  • 相关阅读:
    USACO Training Section 1.2 [USACO1.2]回文平方数
    USACO Training Section 1.2 双重回文数 Dual Palindrom
    USACO Training Section 1.2 双重回文数 Dual Palindrom
    USACO Training Section 1.2 [USACO1.2]方块转换 Transformations
    USACO Training Section 1.2 [USACO1.2]方块转换 Transformations
    USACO Training Section 1.2 挤牛奶Milking Cows
    USACO Training Section 1.2 挤牛奶Milking Cows
    FZU 1894 志愿者选拔
    FZU 1894 志愿者选拔
    Java实现 LeetCode 705 设计哈希集合(使用数组保存有没有被用过)
  • 原文地址:https://www.cnblogs.com/dyllove98/p/3159598.html
Copyright © 2020-2023  润新知