当前位置:首页 > PHP

php 实现栈

2026-02-14 16:20:58PHP

实现栈的基本概念

栈是一种遵循后进先出(LIFO)原则的数据结构,核心操作包括压栈(push)、弹栈(pop)、查看栈顶元素(peek)和判断栈是否为空(isEmpty)。

使用数组实现栈

PHP 数组天然支持栈操作,可通过内置函数直接实现:

class Stack {
    private $stack = [];

    // 压栈
    public function push($item) {
        array_push($this->stack, $item);
    }

    // 弹栈
    public function pop() {
        if ($this->isEmpty()) {
            throw new RuntimeException("Stack is empty");
        }
        return array_pop($this->stack);
    }

    // 查看栈顶元素
    public function peek() {
        if ($this->isEmpty()) {
            throw new RuntimeException("Stack is empty");
        }
        return $this->stack[count($this->stack) - 1];
    }

    // 检查栈是否为空
    public function isEmpty() {
        return empty($this->stack);
    }
}

手动实现栈(不依赖 array_push/pop

通过维护索引模拟栈行为,适合理解底层逻辑:

class ManualStack {
    private $stack = [];
    private $top = -1;

    public function push($item) {
        $this->stack[++$this->top] = $item;
    }

    public function pop() {
        if ($this->isEmpty()) {
            throw new RuntimeException("Stack is empty");
        }
        return $this->stack[$this->top--];
    }

    public function peek() {
        if ($this->isEmpty()) {
            throw new RuntimeException("Stack is empty");
        }
        return $this->stack[$this->top];
    }

    public function isEmpty() {
        return $this->top === -1;
    }
}

栈的应用示例

验证括号匹配是栈的典型应用场景:

function isBalanced($expression) {
    $stack = new Stack();
    $pairs = [')' => '(', '}' => '{', ']' => '['];

    for ($i = 0; $i < strlen($expression); $i++) {
        $char = $expression[$i];
        if (in_array($char, ['(', '{', '['])) {
            $stack->push($char);
        } elseif (in_array($char, [')', '}', ']'])) {
            if ($stack->isEmpty() || $stack->pop() != $pairs[$char]) {
                return false;
            }
        }
    }
    return $stack->isEmpty();
}

// 示例
echo isBalanced("({[]})") ? "Valid" : "Invalid"; // 输出 Valid

性能注意事项

  • PHP 的 array_push/pop 时间复杂度为 O(1),适合大多数场景。
  • 手动实现方式在极端大数据量时可能需优化内存管理。
  • 栈的容量可通过添加 $maxSize 属性限制,并在 push 时检查。

php 实现栈

标签: php
分享给朋友:

相关文章

php 实现自动收货

php 实现自动收货

PHP 实现自动收货功能 自动收货功能通常用于电商系统,在订单超过一定时间未手动确认收货时自动完成订单。以下是实现方法: 数据库设计 需要订单表包含以下关键字段: CREATE TABLE o…

php实现

php实现

PHP 实现的基本方法 PHP 是一种服务器端脚本语言,广泛用于 Web 开发。以下是 PHP 实现的一些常见方法。 变量与数据类型 PHP 变量以 $ 开头,支持多种数据类型: $n…

php实现搜索

php实现搜索

PHP实现搜索功能的方法 在PHP中实现搜索功能通常涉及数据库查询和用户输入的匹配。以下是几种常见的实现方式: 使用MySQL LIKE语句 通过简单的LIKE语句实现基础搜索: $searc…

php 实现登录

php 实现登录

PHP 登录功能实现 使用 PHP 实现登录功能通常需要结合数据库验证和会话管理。以下是一个基本的登录实现流程: 数据库准备 创建用户表存储用户名和密码(建议使用哈希加密): CREATE TAB…

php实现排序

php实现排序

PHP 数组排序方法 PHP 提供了多种内置函数用于数组排序,适用于不同的排序需求。以下是常见的排序方法: 按值升序排序 sort() 函数对数组按值升序排序,重置键名(索引数组适用): $num…

php实现异步

php实现异步

PHP 实现异步的方法 PHP 本身是同步执行的脚本语言,但可以通过以下方法模拟异步操作或实现异步效果: 使用多进程(pcntl_fork) 通过 pcntl_fork 创建子进程实现异步,适用于…