首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 實作佇列資料結構完整指南

     編輯:PHP 相關知識

佇列基本概念

佇列是一種先進先出的線性表。只允許在前端(隊頭)刪除、在後端(隊尾)插入。先進入的資料在隊頭,後進入的在隊尾,取資料時從隊頭移出。無元素時稱為空佇列。

核心操作複雜度

  • Enqueue(入隊):O(1)
  • Dequeue(出隊):O(1)
  • Front(取隊頭):O(1)
  • IsEmpty(判斷空):O(1)
  • Size(取長度):O(1)

PHP 類別實作

<?php
/**
 * 佇列類別
 * @author 創想編程 (TOPPHP.ORG)
 * @license MIT
 */
class Queue {
    private $queue = array();
    private $size = 0;

    public function __construct() {}

    /** 入隊,支援鏈式呼叫 */
    public function enqueue($data) {
        $this->queue[$this->size++] = $data;
        return $this;
    }

    /** 出隊,空佇列回傳 false */
    public function dequeue() {
        if (!$this->isEmpty()) {
            --$this->size;
            $front = array_splice($this->queue, 0, 1);
            return $front[0];
        }
        return false;
    }

    public function getQueue() {
        return $this->queue;
    }

    public function getFront() {
        if (!$this->isEmpty()) {
            return $this->queue[0];
        }
        return false;
    }

    public function getSize() {
        return $this->size;
    }

    public function isEmpty() {
        return 0 === $this->size;
    }
}
?>

使用範例

<?php
$queue = new Queue();
$queue->enqueue(1)->enqueue(2)->enqueue(3)->enqueue(4)->enqueue(5)->enqueue(6);
echo '<pre>', print_r($queue->getQueue(), true), '</pre>';

$queue->dequeue();
echo '<pre>', print_r($queue->getQueue(), true), '</pre>';
?>

執行結果

Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 4
    [4] => 5
    [5] => 6
)
Array
(
    [0] => 2
    [1] => 3
    [2] => 4
    [3] => 5
    [4] => 6
)

PHP 內建替代方案

PHP 陣列函式已提供佇列操作:

  • array_push($arr, $val) / array_unshift($arr, $val) — 入隊
  • array_shift($arr) — 出隊

若只需簡單佇列行為,直接使用陣列函式即可。注意 array_shift 會重新索引陣列,大量資料時效能較差;高效能場景建議使用 SplQueue(SPL 標準庫)。

實際應用場景

  • 任務排程、訊息佇列
  • 廣度優先搜尋(BFS)
  • 緩衝區、列印佇列
  • 非同步處理、背景工作佇列
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved