QUEUE

来源:互联网 发布:哈工大大数据集团简介 编辑:程序博客网 时间:2024/06/05 14:17
<?php
 
 
/**
 * Class Queue
 */
class Queue
{
    /**
     * @var int 队头指针
     */
    private$_front;
 
    /**
     * @var int 队尾指针
     */
    private$_rear;
 
    /**
     * @var array 队列数组
     */
    private$_queue;
 
    /**
     * @var int 队列实际长度
     */
    private$_queueLength;
 
    /**
     * @var int 队列容量;
     */
    private$_queueSize;
 
    /**
     * Queue constructor.初始化队列
     * @param int $capacity 容量(循环队列的最大长度)
     */
    publicfunction__construct($size)
    {
        $this->_queue = [];
        $this->_queueSize =$size;
        $this->_front = 0;
        $this->_rear = 0;
        $this->_queueLength = 0;
    }
 
    /**
     * 销毁队列;
     */
    publicfunction__destruct()
    {
        unset($this->_queue);
    }
 
    /**
     * @method 入队
     * @param mixed $elem 入队的元素
     * @return bool
     */
    publicfunctionenQueue($elem)
    {
        if(!$this->isFull()) {
            $this->_queue[$this->_rear] =$elem;
            $this->_rear++;
            $this->_rear =$this->_rear %$this->_queueCapacity;
            $this->_queueLength++;
            returntrue;
        }
        returnfalse;
    }
 
    /**
     * @method 出队
     * @return mixed|null
     */
    publicfunctiondeQueue()
    {
        if(!$this->isEmpty()) {
            $elem=$this->_queue[$this->_front];
            //unset($this->_queue[$this->_front]);
            $this->_front++;
            $this->_front %=$this->_queueCapacity;
            $this->_queueLength--;
            return$elem;
        }
        returnnull;
    }
 
    /**
     * @method 判断队列是否为空;
     * @return bool
     */
    publicfunctionisEmpty()
    {
        return$this->_queueLength === 0;
    }
 
    /**
     * @method 判断队列是否饱和;
     * @return bool
     */
    publicfunctionisFull()
    {
        return$this->_queueLength ===$this->_queueCapacity;
    }
 
    /**
     * @method 遍历队列并输出(测试队列)
     */
    publicfunctionoutputQueue()
    {
        for($i= $this->_front;$i< $this->_queueLength +$this->_front;$i++) {
            echo$this->_queue[$i%$this->_queueCapacity].PHP_EOL;
        }
    }
 
    /**
     * @method 清空队列
     */
    publicfunctionclearQueue()
    {
        $this->_queue = [];
        $this->_front = 0;
        $this->_rear = 0;
        $this->_queueLength = 0;
    }
}

测试队列类,讲道理是没什么大问题的,优化就靠真实的业务场景了;


$a = new Queue(3);
echo 'enQueue1 $a->enQueue(1)'.PHP_EOL;
$a->enQueue(1);
echo 'enQueue2 $a->enQueue(2)'.PHP_EOL;
$a->enQueue(2);
echo 'enQueue3 $a->enQueue(3)'.PHP_EOL;
$a->enQueue(3);
echo 'enQueue4 $a->enQueue(4)'.PHP_EOL;
$a->enQueue(4);    //讲道理是失败的;
$a->outputQueue();     //输出 1 2 3
echo PHP_EOL;
echo PHP_EOL;
echo $a->deQueue();     //输出 1  队列 2 3
echo PHP_EOL;
echo PHP_EOL;
echo $a->deQueue();     //输出 2  队列 3
$a->enQueue(5);        //队列 3 5
echo PHP_EOL;
echo PHP_EOL;
$a->outputQueue();     //输出 3 5
$a->clearQueue();      //队列空;
http://www.php.cn/php-weizijiaocheng-376068.html
原创粉丝点击