当前位置:首页 > PHP

PHP 实现循环队列

2026-03-13 08:04:26PHP

PHP 实现循环队列

循环队列的概念

循环队列是一种线性数据结构,其操作基于先进先出(FIFO)原则。与普通队列不同,循环队列通过将队列的尾部和头部连接起来,形成一个环形结构,从而更高效地利用存储空间。

PHP 实现循环队列

循环队列的实现思路

  1. 固定大小的数组:使用数组存储队列元素,并维护两个指针(front 和 rear)分别指向队列的头部和尾部。
  2. 模运算:通过模运算实现指针的循环移动,避免数组越界。
  3. 判空与判满:通过 front 和 rear 的关系判断队列是否为空或已满。

PHP 实现代码

以下是一个完整的 PHP 循环队列实现:

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

    public function __construct($capacity) {
        $this->capacity = $capacity;
        $this->queue = array_fill(0, $capacity, null);
        $this->front = -1;
        $this->rear = -1;
        $this->size = 0;
    }

    public function enqueue($item) {
        if ($this->isFull()) {
            return false;
        }
        if ($this->isEmpty()) {
            $this->front = 0;
        }
        $this->rear = ($this->rear + 1) % $this->capacity;
        $this->queue[$this->rear] = $item;
        $this->size++;
        return true;
    }

    public function dequeue() {
        if ($this->isEmpty()) {
            return null;
        }
        $item = $this->queue[$this->front];
        $this->queue[$this->front] = null;
        if ($this->front == $this->rear) {
            $this->front = -1;
            $this->rear = -1;
        } else {
            $this->front = ($this->front + 1) % $this->capacity;
        }
        $this->size--;
        return $item;
    }

    public function isEmpty() {
        return $this->size == 0;
    }

    public function isFull() {
        return $this->size == $this->capacity;
    }

    public function getSize() {
        return $this->size;
    }

    public function peek() {
        if ($this->isEmpty()) {
            return null;
        }
        return $this->queue[$this->front];
    }
}

使用示例

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

关键点说明

  • 初始化:构造函数中设置队列容量,并初始化数组和指针。
  • 入队(enqueue):检查队列是否已满,更新 rear 指针并插入元素。
  • 出队(dequeue):检查队列是否为空,返回 front 指针指向的元素并更新指针。
  • 判空与判满:通过 size 变量或 front/rear 指针的关系判断队列状态。

通过这种方式,可以高效地实现循环队列的基本操作。

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

相关文章

react实现消息队列

react实现消息队列

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

php redis实现消息队列

php redis实现消息队列

使用 PHP 和 Redis 实现消息队列 Redis 是一个高性能的键值存储系统,支持多种数据结构,如列表(List)、发布/订阅(Pub/Sub)等,非常适合实现消息队列。以下是几种常见的实现方式…

php使用redis实现队列

php使用redis实现队列

PHP 使用 Redis 实现队列 Redis 是一个高性能的键值存储系统,支持多种数据结构,如字符串、哈希、列表、集合等。利用 Redis 的列表(List)数据结构可以轻松实现队列功能。以下是实现…

php redis如何实现队列

php redis如何实现队列

PHP Redis 实现队列的方法 Redis 是一个高性能的键值存储系统,常用于实现队列功能。以下是在 PHP 中使用 Redis 实现队列的几种常见方法: 使用 LPUSH 和 RPOP 实现队…

PHP实现会员管理

PHP实现会员管理

PHP实现会员管理的方法 数据库设计 创建会员表(members)包含字段:id(主键)、username、password(建议加密存储)、email、register_time、last_logi…

php 实现消息队列

php 实现消息队列

PHP 实现消息队列的方法 使用 Redis 实现消息队列 Redis 的 List 结构可以用于实现简单的消息队列。通过 LPUSH 和 RPOP 命令可以实现先进先出的队列。 $redis =…