php 实现栈
栈的基本概念
栈是一种遵循后进先出(LIFO)原则的数据结构,核心操作包括:
- push:将元素压入栈顶。
- pop:移除并返回栈顶元素。
- peek:返回栈顶元素但不移除。
- isEmpty:检查栈是否为空。
使用数组实现栈
PHP 数组天然支持栈操作,通过 array_push 和 array_pop 函数即可实现:
class Stack {
private $stack = [];
// 压入元素
public function push($item) {
array_push($this->stack, $item);
}
// 弹出元素
public function pop() {
if ($this->isEmpty()) {
throw new RuntimeException("Stack is empty");
}
return array_pop($this->stack);
}
// 查看栈顶元素
public function peek() {
if ($this->isEmpty()) {
throw new RuntimeException("Stack is empty");
}
return end($this->stack);
}
// 检查是否为空
public function isEmpty() {
return empty($this->stack);
}
}
// 示例用法
$stack = new Stack();
$stack->push(1);
$stack->push(2);
echo $stack->pop(); // 输出 2
echo $stack->peek(); // 输出 1
使用 SplStack 类
PHP 标准库(SPL)提供了内置的 SplStack 类,直接实现栈功能:
$stack = new SplStack();
$stack->push(1);
$stack->push(2);
echo $stack->pop(); // 输出 2
echo $stack->top(); // 输出 1(等效于 peek)
性能注意事项
- 数组实现:适合简单场景,但频繁动态扩容可能影响性能。
- SplStack:基于双向链表实现,适合高频操作,但内存开销略大。
扩展功能
如需限制栈大小或添加其他逻辑(如遍历),可在自定义类中扩展:

public function isFull($maxSize) {
return count($this->stack) >= $maxSize;
}






