QUEUE

<?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 容量(循环队列的最大长度)
      */
     public function __construct( $size )
     {
         $this ->_queue = [];
         $this ->_queueSize = $size ;
         $this ->_front = 0;
         $this ->_rear = 0;
         $this ->_queueLength = 0;
     }
 
     /**
      * 销毁队列;
      */
     public function __destruct()
     {
         unset( $this ->_queue);
     }
 
     /**
      * @method 入队
      * @param mixed $elem 入队的元素
      * @return bool
      */
     public function enQueue( $elem )
     {
         if (! $this ->isFull()) {
             $this ->_queue[ $this ->_rear] = $elem ;
             $this ->_rear++;
             $this ->_rear = $this ->_rear % $this ->_queueCapacity;
             $this ->_queueLength++;
             return true;
         }
         return false;
     }
 
     /**
      * @method 出队
      * @return mixed|null
      */
     public function deQueue()
     {
         if (! $this ->isEmpty()) {
             $elem = $this ->_queue[ $this ->_front];
             //unset($this->_queue[$this->_front]);
             $this ->_front++;
             $this ->_front %= $this ->_queueCapacity;
             $this ->_queueLength--;
             return $elem ;
         }
         return null;
     }
 
     /**
      * @method 判断队列是否为空;
      * @return bool
      */
     public function isEmpty()
     {
         return $this ->_queueLength === 0;
     }
 
     /**
      * @method 判断队列是否饱和;
      * @return bool
      */
     public function isFull()
     {
         return $this ->_queueLength === $this ->_queueCapacity;
     }
 
     /**
      * @method 遍历队列并输出(测试队列)
      */
     public function outputQueue()
     {
         for ( $i = $this ->_front; $i < $this ->_queueLength + $this ->_front; $i ++) {
             echo $this ->_queue[ $i % $this ->_queueCapacity].PHP_EOL;
         }
     }
 
     /**
      * @method 清空队列
      */
     public function clearQueue()
     {
         $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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值