什麼是鏈式隊列php
隊列是一種「先進先出」的存儲結構,是一種特殊的線性表,於它只容許在表的前端(front)進行刪除操做,而在表的後端(rear)進行插入操做。
一般隊列能夠分爲順序隊列和鏈式隊列兩種實現,
順序隊列顧名思義就是採用順序存儲,如以數組方式來實現,
鏈式隊列採用鏈式存儲,如以上篇說到的單向鏈表來實現,前端
鏈式隊列是以鏈式數據結構實現的隊列node
隊列有兩個基本的操做,入隊列和出隊列segmentfault
代碼實現後端
鏈式隊列實現方式多種多樣,能夠以單鏈表,雙向鏈表,循環鏈表等各類方式來實現,這裏以上篇提到的單鏈表的方式來實現。數組
<?php require 'SingleLinkList.php'; /** * Class Queue * 隊列是一種「先進先出」的存儲結構,它只容許在隊頭進行刪除操做,而在隊尾進行插入操做 * 一般隊列能夠分爲順序隊列和鏈式隊列兩種實現 * 順序隊列顧名思義就是採用順序存儲,如以數組方式來實現 * 鏈式隊列採用鏈式存儲,如以上篇說到的單向鏈表來實現 * * 隊列有兩個基本的操做,入隊列和出隊列 */ class QueueImplementedBySingleLinkList extends SingleLinkList { /** * Queue constructor. * 構造函數,初始化隊列 */ public function __construct() { parent::__construct(); } /** * 入隊 * @param $data */ public function enQueue($data) { $node = new Node($data); parent::addNode($node); } /** * 出隊 * @return mixed * @throws Exception */ public function deQueue() { if ($this->isEmpty()) { throw new Exception('隊列爲空'); } $node = parent::searchNodeByIndex(1); parent::deleteNodeByIndex(1); return $node->data; } /** * 隊列是否爲空 * @return bool */ public function isEmpty() { return $this->header->next == null; } }
示例數據結構
$queue = new QueueImplementedBySingleLinkList(); $queue->enQueue('1'); $queue->enQueue('2'); $queue->enQueue('3'); $queue->enQueue('4'); var_dump($queue); echo '-----------', PHP_EOL; $queue->deQueue(); $queue->deQueue(); var_dump($queue);