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

什麼是鏈式隊列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);
相關文章
相關標籤/搜索