数据结构:栈与队列
栈:栈是一种后进先出的数据结构,我们可以想象为一个瓶子,往里放东西。又比如,函数的递归调用,就是一种栈的结构。
php中用数组实现栈:
$arr = array();
// 入栈
function push(&$arr,$val){
$size = count($arr);
$arr[$size] = $val;
}
// 出栈
function pop(&$arr){
$size = count($arr);
unset($arr[$size-1]);
}
push($arr,"a1");
push($arr,"a2");
push($arr,"a3");
echo "入栈后排序:";
print_r($arr);
pop($arr);
echo "出栈后排序:";
print_r($arr);
结果:
入栈后排序:Array
(
[0] => a1
[1] => a2
[2] => a3
)
出栈后排序:Array
(
[0] => a1
[1] => a2
)
队列:队列是一种先进先出的数据结构,类似于我们平日生活中的排队场景。
php中用数组实现队列:
// 用数组实现队列
class Queue {
private $queue;
public function __construct() {
$this->queue = array();
}
// 入队操作
public function enqueue($item) {
array_push($this->queue, $item);
}
// 出队操作
public function dequeue() {
if ($this->isEmpty()) {
return null;
}
// 删除数组第一元素,被返回它
return array_shift($this->queue);
}
// 判断队列是否为空
public function isEmpty() {
return (count($this->queue) == 0);
}
// 队列大小
public function size() {
return count($this->queue);
}
// 返回头部元素
public function peek() {
if ($this->isEmpty()) {
return null;
}
return $this->queue[0];
}
}
// 创建队列实例
$queue = new Queue();
// 入队操作
$queue->enqueue("苹果");
$queue->enqueue("香蕉");
$queue->enqueue("鸭梨");
// 出队操作
echo $queue->dequeue().PHP_EOL; // 输出 "苹果"
// 获取队列当前大小
echo $queue->size().PHP_EOL; // 输出 "2"
// 获取队首元素
echo $queue->peek().PHP_EOL; // 输出 "香蕉"
结果:
苹果
2
香蕉