PHP简单实现栈结构

栈结构

一、栈的定义、特点

1、定义
栈又称为栈或者堆叠,是计算机科学中的一种特殊的串列形式的抽象数据类型,特殊之处在于只允许在链表或者数组的一端堆栈顶端指针,又称 “top”)加入数据push(压栈)和输出数据pop(弹栈),另外栈也可以使用一维数组和链表来实现。
2.栈的特点:
a.先进后出(后进先出),也就是说,我们只能在栈顶端push(压栈)加入数据,也只能在栈顶端pop(弹栈)删除数据;
b.栈除了top(栈顶)和base(栈底)之外,其他的每个元素都有一个前驱和后继;

<?php
class Stack
{
    private $stackArr = [];     //存储栈元素
    private $top = -1;          //栈顶元素位置
    private $stackLen = 10;     //栈的长度
    private $out = null;        //存储出栈元素

    /**
     * Stack constructor. 构造函数
     * @param null $stackLen 栈的长度
     */
    public function __construct($stackLen = null)
    {
        if (!preg_match("/^[1-9][0-9]*$/", $stackLen)) {
            die('长度必须为正整数');
        }
        if ($stackLen == null) {
            $this->stackLen = 10;
        }
        $this->stackLen = $stackLen;
        $this->out = null;
    }

    /**
     * 入栈操作
     * @param string $data 入栈元素
     * @return string  返回栈顶值
     */
    public function pushStack($data = '')
    {
        if (empty($data)) {
            return "入栈元素不能为空";
        }
        if ($this->top == $this->stackLen) {
            return "栈满";
        }
        array_push($this->stackArr, $data);
        ++$this->top;
        return "入栈成功,当前栈顶值:" . $this->top;
    }

    /**
     * 出栈操作
     * @return string 返回当前栈顶值和出栈元素
     */
    public function popStack()
    {
        if ($this->top == -1) {
            return "栈内无数据";
        }
        $this->out = array_pop($this->stackArr);
        --$this->top;
        return "出栈成功,当前栈顶值:" . $this->top . ',出栈元素为:' . $this->out;
    }

    /**
     * 获取栈元素
     * @return array 返回当前栈
     */
    public function getStack()
    {
        return $this->stackArr;
    }

    /**
     * 析构函数:仅当当前对象被销毁时调用
     */
    public function __destruct()
    {
        return "栈对象被销毁";
    }
}

//测试
$stack = new Stack(1);
var_dump($stack->pushStack(121).'<br />');
var_dump($stack->pushStack(34).'<br />');
var_dump($stack->pushStack(45).'<br />');
var_dump($stack->pushStack(7).'<br />');
var_dump($stack->getStack());
var_dump($stack->popStack().'<br />');
var_dump($stack->popStack().'<br />');
var_dump($stack->popStack().'<br />');
var_dump($stack->getStack());
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值