时间:2021-07-01 10:21:17 帮助过:15人阅读
下面使用php实现一个简单的循环队列模型;
初始状态的队列,队列长度为0,队头和队尾的指针相同均位于队列的开始;
入队操作:队尾指针向后移动,长度加一;
出队操作:队头指针向后移动,长度减一;
循环队列特点:队列大小固定,队列所开辟的内存空间可循环使用,指针的移动是靠与queueSize取余运算移动;
下面的例子是利用数组实现队列存储,数组下标作为指针;
输出(测试队列) */ 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; } }
- <?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 遍历队列并
测试队列类,讲道理是没什么大问题的,优化就靠真实的业务场景了;
输出 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(); //队列空;
- $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(); //
如有不对,敬请指教
以上就是php数据结构实现队列的示例代码的详细内容,更多请关注Gxl网其它相关文章!