简单用PHP理解栈的PUSH和POP

什么是栈

(stack)是一种动态集合,实现的是一种后进先出(last-in, first-out, LIFO)的策略。

栈的PUSH和POP

栈上的INSERT操作被称为压入(PUSH),而无元素参数的DELETE操作称为弹出(POP)。

举个栗子

我们生活中常见到的发传单,假设我去发传单,我把传单拿在手上。
我发出去的时候是从上往下发,发的差不多了,监工看到我手里的传单不多,
把另外一叠传单放到到我剩下的传单上面(后进),于是我继续从上往下发(先出)。
在最上面的就是先发出去的。

<?php
// 栈压入
function stack_push($array, $value)
{
    $max = get_max_key($array);
    $max = $max + 1;
    $array[$max] = $value;
    return $array;
}

// 栈弹出
function stack_pop($array)
{
    $max = get_max_key($array);
    if(check_is_empty_stack($max)){
        return 'Error, underflow'; // 栈下溢
    }
    unset($array[$max]);
    return $array;
}

// 检测是否为空栈
function check_is_empty_stack($value)
{
    if ($value == 0) {
        return true;
    }
    return false;
}

// 获取最大的key
function get_max_key($arr)
{
    $max_key = 0;
    foreach ($arr as $key => $value) {
        if ($key > $max_key) {
            $max_key = $key;
        }
    }
    return $max_key;
}

$testArr = array(1, 23, '24324' => 2324, '424' => 234234);
var_dump('测试数据', $testArr);

// 压入一个
$result = stack_push($testArr, 8);
var_dump('压入一个', $result);

// 再压入一个
$result = stack_push($result, 'test');
var_dump('再压入一个', $result);

// 弹出一个
$result = stack_pop($result);
var_dump('弹出一个: ', $result);

//再弹出一个
$result = stack_pop($result);
var_dump('再弹出一个: ', $result);

//再弹出一个
$result = stack_pop($result);
var_dump('再弹出一个: ', $result);

打印的结果为:
栈结果打印

转载于:https://www.cnblogs.com/ailhc/p/7587114.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值