1
说明:该文章是用数组来实现栈,所以主要会对数组做逻辑操作(数组的逻辑操作在上文有提到 https://segmentfault.com/a/11...

1. 实现逻辑

<?php
/**
 * content: 数组栈的实现
 * create: 2020-10-20
 */
namespace StackBundle;
use ArrayBundleBaseArray;
class BaseArrayStack
{
    /**
    * 数组类
    * @var BaseArray
    */
    protected $baseArray;
    
    public function __construct(BaseArray $baseArray)
    { 
        $this->baseArray = $baseArray;
    }
    
    /**
    * 弹出栈顶元素
    * @return mixed
    */
    public function pop()
    { 
        return $this->baseArray->del($this->baseArray->getSize() - 1);
    }
    
    /**
    * 从栈顶插入元素
    * @param mixed $value
    */
    public function push($value): void
    {
        $this->baseArray->addLast($value);
    }
    
    /**
    * 获取栈顶元素
    * @return mixed
    */
    public function getTopValue()
    { 
        return $this->baseArray->getLast();
    }
    
    /**
    * 打印数组内容
    * @return string
    */
    public function __toString()
    { 
        return (string)$this->baseArray;
    }
}

2. 执行逻辑

<?php
require_once __DIR__. '/../vendor/autoload.php';
$stack = new StackBundleBaseArrayStack(new ArrayBundleBaseArray(1));
// 从末尾插入5个元素
$stack->push('a');
$stack->push('b');
$stack->push('c');
$stack->push('d');
$stack->push('e');
// 弹出4个元素
echo $stack->pop(). PHP_EOL;
echo $stack->pop(). PHP_EOL;
echo $stack->pop(). PHP_EOL;
echo $stack->pop(). PHP_EOL;
// 获取栈顶元素
echo $stack->getTopValue(). PHP_EOL;
// 输出在栈中存在的元素
echo $stack;

3. 打印结果

e
d
c
b
a
Array: size = 1, capacity = 1
[a]

yujiaming
19 声望1 粉丝