当前位置:首页 > PHP

PHP 实现循环队列

2026-02-15 08:59:15PHP

PHP 实现循环队列

循环队列的概念

循环队列是一种线性数据结构,通过数组实现,利用头尾指针的循环移动来避免数据搬移,提高空间利用率。当队列尾部到达数组末尾时,会从数组头部重新开始存储。

PHP 实现循环队列的关键点

  • 使用固定大小的数组存储元素。
  • 维护两个指针 frontrear,分别指向队首和队尾。
  • 通过取模运算实现指针的循环移动。
  • 区分队列满和队列空的条件。

代码实现

class CircularQueue {
    private $queue;
    private $front;
    private $rear;
    private $capacity;

    public function __construct($capacity) {
        $this->capacity = $capacity + 1; // 预留一个空位用于区分满和空
        $this->queue = array_fill(0, $this->capacity, null);
        $this->front = 0;
        $this->rear = 0;
    }

    // 入队
    public function enqueue($item) {
        if ($this->isFull()) {
            throw new RuntimeException("Queue is full");
        }
        $this->queue[$this->rear] = $item;
        $this->rear = ($this->rear + 1) % $this->capacity;
    }

    // 出队
    public function dequeue() {
        if ($this->isEmpty()) {
            throw new RuntimeException("Queue is empty");
        }
        $item = $this->queue[$this->front];
        $this->front = ($this->front + 1) % $this->capacity;
        return $item;
    }

    // 检查队列是否为空
    public function isEmpty() {
        return $this->front == $this->rear;
    }

    // 检查队列是否已满
    public function isFull() {
        return ($this->rear + 1) % $this->capacity == $this->front;
    }

    // 获取队首元素
    public function peek() {
        if ($this->isEmpty()) {
            throw new RuntimeException("Queue is empty");
        }
        return $this->queue[$this->front];
    }

    // 获取队列大小
    public function size() {
        return ($this->rear - $this->front + $this->capacity) % $this->capacity;
    }
}

使用示例

$queue = new CircularQueue(3);
$queue->enqueue(1);
$queue->enqueue(2);
$queue->enqueue(3);
echo $queue->dequeue(); // 输出 1
$queue->enqueue(4);
echo $queue->size();    // 输出 3

注意事项

  • 循环队列的容量通常需要预留一个空位,以区分队列满和队列空的条件。
  • 入队和出队操作需检查队列状态,避免溢出或下溢。
  • 指针移动通过取模运算实现循环特性。

PHP 实现循环队列

标签: 队列PHP
分享给朋友:

相关文章

php 队列的实现

php 队列的实现

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

Vue消息队列实现

Vue消息队列实现

Vue 消息队列实现方法 在 Vue 中实现消息队列可以通过多种方式,以下是几种常见的方法: 使用 Vuex 状态管理 Vuex 可以用于管理全局状态,适合实现消息队列功能。通过 mutations…

php redis 队列实现

php redis 队列实现

PHP Redis 队列实现 Redis 是一个高性能的键值存储系统,常被用作消息队列。以下是使用 PHP 和 Redis 实现队列的几种方法。 安装依赖 确保已安装 PHP Redis 扩展。可…

react实现消息队列

react实现消息队列

实现消息队列的基本思路 在React中实现消息队列通常需要结合状态管理工具(如Redux、Context API)或自定义Hook来管理消息的存储、消费和清理。消息队列的核心功能包括消息的入队、出队、…

php实现redis消息队列

php实现redis消息队列

安装 Redis 扩展 确保 PHP 已安装 Redis 扩展。可以通过以下命令安装: pecl install redis 在 php.ini 中添加 extension=redis.so 并重…

PHP http长连接的实现

PHP http长连接的实现

HTTP 长连接基础概念 HTTP长连接(Keep-Alive)允许在单个TCP连接上发送和接收多个HTTP请求/响应,减少重复建立和断开连接的开销。HTTP/1.1默认启用长连接,而HTTP/1.0…