队列时典型的FIFO数据结构。有入队和出队操作组成,新元素使用添加在队列的末尾,出队只能移除第一个元素。
<?php
/**
 * Created by PhpStorm.
 * User: Lenovo
 * Date: 2021/7/8
 * Time: 16:50
 * Desc 实现对联轮子
 */
class Queue
{
    public $start = 1;
    public $end = 0;
    public $max = 0;
    public $queue = [];
    public function __construct($maxsize)
    {
        if (!intval($maxsize)) {
            die('init queue fail');
        } else {
            $this->max = intval($maxsize);
        }
    }
    public function isEmpty()
    {
        return !$this->end;
    }
    public function isFull()
    {
        return $this->end == $this->max;
    }
    public function push($val)
    {
        if ($this->isFull()) {
            return false;
        } else if ($this->isEmpty()) {
        }
        $this->end ++;
        $this->queue[$this->end] = $val;
        return true;
    }
    public function pop()
    {
        $val = $this->queue[$this->start];
        //.unset($this->queue[$this->start]);
        if ($this->isEmpty()) {
            return false;
        } else {
            foreach ($this->queue as $key => $val) {
               if ($key == 0) $returnVal = $val;
                $this->queue[$key] = $this->queue[$key + 1];
            }
            unset($this->queue[$this->end]);
            $this->end--;
            return $returnVal;
        }
    }
}
$queue = new Queue(10);
if (!$queue->push(1)) {
    echo 'fail1';
    print_r($queue->queue);
} else if (!$queue->push(2)) {
    echo 'fail2';
    print_r($queue->queue);
} else if (!$queue->push(3)) {
    echo 'fail3';
    print_r($queue->queue);
} else if (!$queue->push(4)) {
    echo 'fail4';
    print_r($queue->queue);
} else if (!$queue->push(5)) {
    echo 'fail5';
    print_r($queue->queue);
} else if (!$queue->push(6)) {
    echo 'fail6';
    print_r($queue->queue);
} else if (!$queue->push(7)) {
    echo 'fail7';
    print_r($queue->queue);
}
$queue->push(8);
$queue->pop();
$queue->pop();
$queue->pop();
if (!$queue->push(9)) {
    echo 'fail9';
    print_r($queue->queue);
} else if (!$queue->push(10)) {
    echo 'fail10';
    print_r($queue->queue);
} else if (!$queue->push(11)) {
    echo 'fail11';
    print_r($queue->queue);
}
print_r($queue->queue);