当前位置:首页 > PHP

php 实现堆栈实现

2026-02-14 06:25:23PHP

使用数组模拟堆栈

在PHP中,可以通过数组函数array_push()array_pop()实现堆栈的压入和弹出操作。堆栈遵循后进先出(LIFO)原则。

php 实现堆栈实现

$stack = array();

// 压栈操作
array_push($stack, 'A');
array_push($stack, 'B');
array_push($stack, 'C');

// 查看堆栈内容
print_r($stack); // 输出: Array ( [0] => A [1] => B [2] => C )

// 弹栈操作
$top = array_pop($stack);
echo $top; // 输出: C
print_r($stack); // 输出: Array ( [0] => A [1] => B )

使用SplStack类

PHP标准库(SPL)提供了SplStack类专门用于堆栈操作,性能优于数组模拟。

php 实现堆栈实现

$stack = new SplStack();

// 压栈操作
$stack->push('X');
$stack->push('Y');
$stack->push('Z');

// 查看堆栈顶部元素(不移除)
echo $stack->top(); // 输出: Z

// 弹栈操作
$popped = $stack->pop();
echo $popped; // 输出: Z

// 遍历堆栈
$stack->rewind();
while($stack->valid()) {
    echo $stack->current(), "\n";
    $stack->next();
}

手动实现堆栈类

通过面向对象方式自定义堆栈类,可以更灵活地扩展功能。

class Stack {
    private $elements = array();

    public function push($item) {
        array_push($this->elements, $item);
    }

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

    public function peek() {
        return end($this->elements);
    }

    public function isEmpty() {
        return empty($this->elements);
    }

    public function size() {
        return count($this->elements);
    }
}

// 使用示例
$stack = new Stack();
$stack->push(10);
$stack->push(20);
echo $stack->pop(); // 输出: 20
echo $stack->peek(); // 输出: 10

堆栈的应用示例

实现括号匹配校验是堆栈的典型应用场景。

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

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

var_dump(isBalanced("({[]})")); // 输出: true
var_dump(isBalanced("([)]"));   // 输出: false

标签: 堆栈php
分享给朋友:

相关文章

php实现websocket

php实现websocket

PHP 实现 WebSocket WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议。PHP 可以通过多种方式实现 WebSocket 功能,以下是几种常见的方法: 使用 Ratc…

php实现搜索

php实现搜索

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

php 实现验证码

php 实现验证码

使用 PHP 生成验证码 验证码(CAPTCHA)用于防止自动化脚本提交表单,以下是几种常见的 PHP 实现方法。 使用 GD 库生成图片验证码 GD 库是 PHP 的图像处理扩展,可用于生成验证…

php 实现文件下载

php 实现文件下载

实现文件下载的基本方法 使用 PHP 实现文件下载的核心是通过设置 HTTP 头部信息,强制浏览器将文件作为附件下载而非直接显示。以下是一个基础实现示例: $file_path = '/path/t…

php实现即时通讯

php实现即时通讯

PHP 实现即时通讯的方案 即时通讯(IM)可以通过多种方式实现,PHP 作为服务器端语言,通常需要结合前端技术(如 WebSocket、AJAX)或第三方服务来实现实时通信。以下是几种常见的实现方式…

php怎么实现登录功能

php怎么实现登录功能

数据库准备 创建用户表存储登录信息,通常包括用户名、密码(需加密)等字段。示例SQL: CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY…