php-queue

队列时典型的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);

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容