php实现队列

炎欲天舞
Libérer: 2023-03-14 17:52:01
original
11263 Les gens l'ont consulté

队列(Queue): 满足先进先出(FIFO)的规则;

下面使用php实现一个简单的循环队列模型;

初始状态的队列,队列长度为0,队头和队尾的指针相同均位于队列的开始;

入队操作:队尾指针向后移动,长度加一;

出队操作:队头指针向后移动,长度减一;

循环队列特点:队列大小固定,队列所开辟的内存空间可循环使用,指针的移动是靠与queueSize取余运算移动;

下面的例子是利用数组实现队列存储,数组下标作为指针;

_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; } }
Copier après la connexion

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

$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(); //队列空;
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!