【php實現數據結構】鏈式隊列

什麼是鏈式隊列

隊列是一種“先進先出”的存儲結構,是一種特殊的線性表,於它只允許在表的前端(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);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章