隊列(Queue),是一種特殊的先進先出線性表,其只能在前端進行刪除操作(一般稱為出隊),在後端進行插入操作(一般稱為入隊)。進行刪除操作的端稱為隊頭,進行插入操作的端稱為隊尾。隊列,是按照先進先出或後進後出的原則組織數據。當隊列中沒有元素時,稱為空隊列。
數據結構與算法(PHP實現) - 隊列(Queue) 1
<?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;
}
}
?>
示例代碼 1
<?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(出隊)。