当前位置:首页 > PHP

php实现栈实现

2026-02-28 05:26:47PHP

PHP 实现栈数据结构

栈是一种遵循 LIFO(后进先出)原则的数据结构,可以通过数组或链表实现。以下是两种常见的 PHP 栈实现方式。

基于数组的栈实现

PHP 数组天然支持栈操作,结合 array_push()array_pop() 函数即可实现:

class ArrayStack {
    private $stack;

    public function __construct() {
        $this->stack = [];
    }

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

    public function pop() {
        if ($this->isEmpty()) {
            return null;
        }
        return array_pop($this->stack);
    }

    public function peek() {
        if ($this->isEmpty()) {
            return null;
        }
        return $this->stack[count($this->stack) - 1];
    }

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

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

基于链表的栈实现

通过链表节点实现栈,避免数组动态扩容的开销:

class Node {
    public $data;
    public $next;

    public function __construct($data) {
        $this->data = $data;
        $this->next = null;
    }
}

class LinkedListStack {
    private $top;

    public function __construct() {
        $this->top = null;
    }

    public function push($data) {
        $newNode = new Node($data);
        $newNode->next = $this->top;
        $this->top = $newNode;
    }

    public function pop() {
        if ($this->isEmpty()) {
            return null;
        }
        $popped = $this->top->data;
        $this->top = $this->top->next;
        return $popped;
    }

    public function peek() {
        return $this->isEmpty() ? null : $this->top->data;
    }

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

栈的基本操作复杂度

操作 时间复杂度 空间复杂度
Push O(1) O(1)
Pop O(1) O(1)
Peek O(1) O(1)
isEmpty O(1) O(1)

实际应用示例

检查字符串中的括号是否匹配:

function isBalanced($expression) {
    $stack = new ArrayStack();
    $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();
}

性能优化建议

  1. 预分配数组空间:若已知栈最大容量,可用 SplFixedArray 替代普通数组
  2. 避免频繁扩容:数组实现时,当容量不足时按固定比例(如 2 倍)扩容
  3. 内存管理:链表实现需注意及时解除无用节点的引用

两种实现方式的选择取决于具体场景:数组实现适合频繁随机访问,链表实现适合动态大小和内存敏感场景。

php实现栈实现

标签: php
分享给朋友:

相关文章

php实现文件下载

php实现文件下载

PHP 实现文件下载的方法 使用 header() 函数强制下载 设置正确的 HTTP 头信息,强制浏览器下载文件而不是直接打开。 $file = 'path/to/file.pdf'; if (f…

php实现图片上传

php实现图片上传

实现图片上传的基本步骤 创建HTML表单用于文件上传,表单需设置enctype="multipart/form-data"属性,确保文件数据正确传输。 <form action="uploa…

php实现上传

php实现上传

PHP 文件上传实现 HTML 表单设置 创建一个包含文件上传字段的 HTML 表单,确保表单的 enctype 属性设置为 multipart/form-data,这是文件上传必需的设置。 &l…

php 路由实现

php 路由实现

PHP 路由实现方法 在 PHP 中实现路由功能有多种方式,以下是几种常见的实现方法: 使用原生 PHP 实现 通过解析 URL 并匹配对应的控制器和动作: $request = $_SERVER…

php 实现文件下载

php 实现文件下载

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

php实现聊天

php实现聊天

实现 PHP 聊天功能的方法 使用 WebSocket 和 PHP 实现实时聊天 WebSocket 是一种全双工通信协议,适合实现实时聊天功能。PHP 可以通过 Ratchet 库实现 WebS…