1. 程式人生 > >修煉內功---資料結構與演算法5---棧

修煉內功---資料結構與演算法5---棧

<?php

/**
 * 通過 PHP 陣列實現簡單的順序棧
 */
class SimpleStack
{

    private $_stack = [];
    private $_size = 0;

    public function __construct($size = 10)
    {
        $this->_size = $size;
    }

    // 獲取棧頂元素
    public function pop()
    {
        // 空棧
        if (count($this->_stack) == 0) {
            return false;
        }
        //array_pop() 彈出並返回 array 陣列的最後一個單元,並將陣列 array 的長度減一
        //Note: 使用此函式後會重置(reset())array 指標。
        //如果 array 是空(如果不是一個數組),將會返回 NULL
        return array_pop($this->_stack);
    }

    // 推送元素到棧頂
    public function push($value)
    {
        // 滿棧
        if (count($this->_stack) == $this->_size) {
            return false;
        }
        //array_push() 將 array 當成一個棧,並將傳入的變數壓入 array 的末尾。array 的長度將根據入棧變數的數目增加。
        //Note: 如果用 array_push() 來給陣列增加一個單元,還不如用 $array[] = ,因為這樣沒有呼叫函式的額外負擔。
        //返回處理之後陣列的元素個數
        array_push($this->_stack, $value);
        return true;
    }

    public function isEmpty()
    {
        // 是否是空棧
        //這個寫法很優雅
        return current($this->_stack) == false;
    }

    public function size()
    {
        return count($this->_size);
    }
}

$stack = new SimpleStack(15);
var_dump($stack->isEmpty());  # true
$stack->push(111);
$stack->push('學院君');
var_dump($stack->pop());  # 學院君
var_dump($stack->size());  # 1