算法 php实现

2019-08-13  本文已影响0人  dongshixiao
<?php
/**
 * php模拟循环队列
 * Class myQueue
 */
class myQueue
{
    public $arr = []; // int类型 队列数组
    public $front; // 队头索引
    public $rear; // 队尾索引
    public $count = 0; //数组现在长度
    public $max; //数组最大长度

    /**
     * 构造器
     * myQueue constructor.
     * @param int $num
     */
    public function __construct(int $num)
    {
        $this->max = $num; //数组最大长度
        $this->front = $num; // 队列头下标
        $this->rear = $num; // 队列尾下标
    }


    /**
     * 入队列
     * @param int $element
     * @throws Exception
     */
    public function in(int $element)
    {
        // 判断长度是否超出
        if ($this->count == $this->max) throw new Exception("长度溢出");
        $this->rear = ($this->rear + 1) % $this->max;
        $this->arr[$this->rear] = $element;
        $this->count++;
    }


    /**
     * 出队
     * @return mixed
     * @throws Exception
     */
    public function out(): int
    {
        if ($this->count == 0) throw new Exception("队列空了!");
        $this->front = ($this->front + 1) % $this->max;
        $element = $this->arr[$this->front];
        unset($this->arr[$this->front]);
        $this->count--;
        return $element;
    }
}


try {
    $queue = new myQueue(10);
    $queue->in(10);
    $queue->in(20);
    $queue->out();
    echo '<pre>';
    print_r($queue);
} catch (Exception $exception) {
    echo $exception->getMessage();
}

上一篇 下一篇

猜你喜欢

热点阅读