栈(Stack)详解-php数据结构实现

栈(Stack)

一.栈的基本概念

1.栈本质上就是一种加了限制的数组,它只允许在一端进行插入或删除操作。

2.栈数据结构可以比喻为手枪弹夹。
手枪弹夹是一种用于存储子弹的装置,具有一些特殊的属性和行为,类似于栈。

①后进先出(LIFO):手枪弹夹的工作原则是后放入的子弹将首先被使用。当手枪发射子弹时,从弹夹的顶部取出最后放入的子弹,以确保最新的子弹被使用。

②只能在一端进行插入和删除操作:手枪弹夹通常只允许在顶部插入和弹出子弹。新的子弹被插入到弹夹的顶部,而弹出子弹时也是从顶部开始。

③不能在中间进行任何操作:手枪弹夹不允许在中间位置进行插入或删除子弹。只能对位于顶部的子弹进行访问或修改。
在这里插入图片描述
栈顶(Top):线性表允许进行插入和删除的一端。

栈底(Bottom):固定的,不允许进行插入和删除的另一端。

空栈:不含任何元素。

2.栈的基本操作

(1)push():进栈,若栈未满,则将$item加入使之成为新栈顶

(2)Pop():出栈,若栈非空,则将栈顶元素移除,并用$item返回

(3)peek():读栈顶元素,若栈顶元素非空,返回栈顶元素

(4)isEmpty():判断一个栈是否为空

二.PHP 实现

1.Stack 对象定义

class Stack {
    private $stackArray;
    private $top;

    public function __construct() {
        $this->stackArray = array();
        $this->top = -1;
    }
	#将元素推入栈中
    public function push($item) {
        $this->top++;
        $this->stackArray[$this->top] = $item;
    }
	#从栈中弹出元素
    public function pop() {
        if ($this->isEmpty()) {
            return null;
        }
        
        $item = $this->stackArray[$this->top];
        unset($this->stackArray[$this->top]);
        $this->top--;

        return $item;
    }
	#查栈是否为空
    public function isEmpty() {
        return ($this->top == -1);
    }
	#查看栈顶元素
    public function peek() {
        if ($this->isEmpty()) {
            return null;
        }

        return $this->stackArray[$this->top];
    }
	#获取栈的大小
    public function size() {
        return ($this->top + 1);
    }
}

2.Stack 对象使用

$stack = new Stack();
$stack->push(11);
$stack->push(22);
$stack->push(33);

echo $stack->pop();  // 输出: 33
echo $stack->peek(); // 输出: 22
echo $stack->size(); // 输出: 2
echo $stack->isEmpty() ? '栈为空' : '栈不为空'; // 输出: 栈不为空
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值