php 实现堆栈实现
堆栈的基本概念
堆栈(Stack)是一种遵循后进先出(LIFO)原则的数据结构。主要操作包括压栈(push)和弹栈(pop),通常还会包含查看栈顶元素(peek)和判断是否为空(isEmpty)等方法。

使用数组实现堆栈
PHP中可以通过数组模拟堆栈行为,利用array_push()和array_pop()函数简化操作。

class Stack {
private $stack;
private $size;
public function __construct() {
$this->stack = array();
$this->size = 0;
}
// 压栈操作
public function push($element) {
array_push($this->stack, $element);
$this->size++;
}
// 弹栈操作
public function pop() {
if ($this->isEmpty()) {
return null;
}
$this->size--;
return array_pop($this->stack);
}
// 查看栈顶元素
public function peek() {
if ($this->isEmpty()) {
return null;
}
return $this->stack[count($this->stack) - 1];
}
// 判断堆栈是否为空
public function isEmpty() {
return $this->size === 0;
}
// 获取堆栈大小
public function size() {
return $this->size;
}
}
使用SplStack类实现
PHP标准库(SPL)提供了内置的SplStack类,直接支持堆栈操作,无需手动实现。
$stack = new SplStack();
$stack->push('A'); // 压栈
$stack->push('B');
$top = $stack->pop(); // 弹栈(返回'B')
$isEmpty = $stack->isEmpty(); // 检查是否为空
性能注意事项
- 数组实现:适合简单场景,但频繁的数组操作可能产生内存开销。
- SplStack:基于双向链表实现,压栈和弹栈操作的时间复杂度均为O(1),适合高性能需求。
应用场景示例
堆栈常用于算法问题(如括号匹配、表达式求值)或系统开发(如调用栈管理)。
// 括号匹配检测示例
function isBalanced(string $str): bool {
$stack = new SplStack();
foreach (str_split($str) as $char) {
if ($char === '(') {
$stack->push($char);
} elseif ($char === ')') {
if ($stack->isEmpty()) return false;
$stack->pop();
}
}
return $stack->isEmpty();
}
错误处理建议
在自定义实现中应检查边界条件,例如弹栈时堆栈为空的情况,避免未定义行为。






