php实现队列

炎欲天舞
Lepaskan: 2023-03-14 17:52:01
asal
11291 orang telah melayarinya

队列(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; } }
Salin selepas log masuk

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

$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(); //队列空;
Salin selepas log masuk

Atas ialah kandungan terperinci php实现队列. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!