什麼是鏈式隊列
隊列是一種“先進先出”的存儲結構,是一種特殊的線性表,於它只允許在表的前端(front)進行刪除操作,而在表的後端(rear)進行插入操作。
通常隊列可以分爲順序隊列和鏈式隊列兩種實現,
順序隊列顧名思義就是採用順序存儲,如以數組方式來實現,
鏈式隊列採用鏈式存儲,如以上篇說到的單向鏈表來實現,
鏈式隊列是以鏈式數據結構實現的隊列
隊列有兩個基本的操作,入隊列和出隊列
代碼實現
鏈式隊列實現方式多種多樣,可以以單鏈表,雙向鏈表,循環鏈表等各種方式來實現,這裏以上篇提到的單鏈表的方式來實現。
<?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);