【php實現資料結構】鏈式佇列

烏啦啦發表於2019-02-16

什麼是鏈式佇列

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

相關文章