当前位置:首页 > 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)

实际应用示例

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

php实现栈实现

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 实现秒杀的关键技术 秒杀系统需要解决高并发、超卖、性能瓶颈等问题。以下是实现秒杀的核心方案: 使用 Redis 预减库存 将商品库存提前加载到 Redis 中,通过原子操作保证库存准确性:…

php实现一个

php实现一个

PHP 实现一个简单的计算器 创建一个基本的计算器,支持加、减、乘、除运算。以下是一个完整的实现代码示例: <?php $result = ""; if ($_SERVER["REQUES…

php 函数实现

php 函数实现

PHP 函数实现基础 PHP 函数的定义使用 function 关键字,后跟函数名和参数列表。函数名不区分大小写,但建议保持一致。 function functionName($param1, $p…

php 队列的实现

php 队列的实现

PHP 队列的实现方法 使用数据库实现队列 创建一个数据表存储队列任务,包含任务ID、状态、创建时间等字段。通过SQL语句实现任务的入队和出队操作。 // 入队操作 INSERT INTO queu…

php实现重定向

php实现重定向

使用header函数进行重定向 在PHP中,header()函数是实现重定向的常用方法。通过发送HTTP头信息Location,浏览器会自动跳转到指定URL。需确保在调用header()前没有输出任何…

php实现秒杀

php实现秒杀

PHP实现秒杀功能的关键技术 秒杀系统需要解决高并发、数据一致性、系统稳定性等问题。以下是PHP实现秒杀功能的核心技术方案: 数据库优化 使用InnoDB引擎的行级锁和事务特性,确保数据一致性。商品…