数据结构和算法之队列

队列的定义

队列是线性表的一部分,底层可以用属数组和链表,这里采用数组。
主要要用两个变量front和rear来记录位置,采用循环数组的形式,减少空间的浪费。

<?php
/*
 * @Author: your name
 * @Date: 2020-05-03 10:39:32
 * @LastEditTime: 2020-05-03 11:18:56
 * @LastEditors: Please set LastEditors
 * @Description: 不是循环链表形式的
 * @FilePath: /phpSrc/Queue.php
 */
namespace dataStruture;
// class Queue
// {
//     private $QueueArr = array();
//     private $queueLength;
//     private $front = -1;//记录队列首部的位置
//     private $rear = -1;//记录队列尾部的位置
//     public function __construct(int $queueLength = 20)
//     {
//         $this->queueLength = $queueLength;
//     }
//     public function push($value)
//     {
//         # code...
//        if($this->front==$this->queueLength-1)
//         return '当前队列空间已满';
//         array_push($this->QueueArr,$value);
//         $this->front++;
//         return '加入队列成功';
//     }
//     public function pop()
//     {
//         if($this->front==$this->rear)
//             return '队列为空';
//         $out = $this->QueueArr[++$this->rear];
//         unset($this->QueueArr[$this->rear]);
//         return $out;
//     }
// }
class Queue
{
    private $QueueArr = array();
    private $queueLength;
    private $front = 0;//记录队列首部的位置
    private $rear = 0;//记录队列尾部的位置
    public function __construct(int $queueLength = 20)
    {
        $this->queueLength = $queueLength;
    }
    public function push($value)
    {
        # code...
       if(($this->front+1) % $this->queueLength ==$this->rear)
            return '当前队列空间已满';
        $this->QueueArr[$this->front] = $value;
        $this->front = ($this->front+1) % $this->queueLength;
        return '加入队列成功';
    }
    public function pop()
    {
        if($this->front==$this->rear)
            return '队列为空';
        $out = $this->QueueArr[$this->rear];
        $this->rear = ($this->rear+1)%$this->queueLength;
        return $out;
    }
}
$queue = new Queue;
echo $queue->push(13).PHP_EOL;
echo $queue->push(12).PHP_EOL;
echo $queue->pop().PHP_EOL;
echo $queue->pop().PHP_EOL;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值