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

$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类专门用于堆栈操作,性能优于数组模拟。

$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






