隊列(Queue),是一種特殊的先進先出線性表,其只能在前端進行刪除操作(一般稱為出隊),在後端進行插入操作(一般稱為入隊)。進行刪除操作的端稱為隊頭,進行插入操作的端稱為隊尾。隊列,是按照先進先出或後進後出的原則組織資料。當隊列中沒有元素時,稱為空白隊列。
資料結構與演算法(PHP實現) - 隊列(Queue)
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
<?php /** * 資料結構與演算法(PHP實現) - 隊列(Queue)。 *
* @author 創想編程(TOPPHP.ORG) * @copyright Copyright (c) 2013 創想編程(TOPPHP.ORG) All Rights Reserved * @license http://www.opensource.org/licenses/mit-license.php MIT LICENSE * @version 1.0.0 - Build20130607 */ class Queue {
/** * 隊列。 *
* @var array */ private
$queue ; /** * 隊列的長度。 *
* @var integer */ private
$size ; /** * 構造方法 - 初始化資料。 */ public
function __construct() { $this ->queue =
array (); $this ->size = 0; } /** * 入隊操作。 *
* @param mixed $data 入隊資料。 * @return object 返回對象本身。 */ public
function enqueue( $data ) { $this ->queue[ $this ->size++] =
$data ; return
$this ; } /** * 出隊操作。 *
* @return mixed 空隊列時返回FALSE,否則返回隊頭元素。 */ public
function dequeue() { if
(! $this ->isEmpty()) { -- $this ->size; $front
= array_splice ( $this ->queue, 0, 1); return
$front [0]; } return
FALSE; } /** * 擷取隊列。 *
* @return array 返回整個隊列。 */ public
function getQueue() { return
$this ->queue; } /** * 擷取隊頭元素。 *
* @return mixed 空隊列時返回FALSE,否則返回隊頭元素。 */ public
function getFront() { if
(! $this ->isEmpty()) { return
$this ->queue[0]; } return
FALSE; } /** * 擷取隊列的長度。 *
* @return integer 返回隊列的長度。 */ public
function getSize() { return
$this ->size; } /** * 檢測隊列是否為空白。 *
* @return boolean 空隊列則返回TRUE,否則返回FALSE。 */ public
function isEmpty() { return
0 === $this ->size; } } ?> |
範例程式碼
12345678 |
<?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>' ; ?> |
說明:PHP數組函數已有類似隊列的功能函數存在:array_unshift(入隊)和、array_shift(出隊)。