队列的定义
队列是线性表的一部分,底层可以用属数组和链表,这里采用数组。
主要要用两个变量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;