什麼是鏈式佇列
佇列是一種“先進先出”的儲存結構,是一種特殊的線性表,於它只允許在表的前端(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);