[TOC]
# 隊列
定義:
* 隊列是一種線性結構,來自線性表數據結構,“操作受限”的線性表
* 是先進先出的線性表,隊列只允許在隊首出隊,隊尾入隊

# 隊列的類型
* 用數組實現
* 用鏈表實現
# 隊列的應用
## 通過數組實現隊列
~~~
class Queue
{
private $queue;//隊列
private $size;//隊列的長度
/**
* 構造方法
*/
public function __construct()
{
$this->queue = array();
$this->size = 0;
}
/**
* 入隊操作
* @param $data 入隊數據
* @return object 返回對象本身
*/
public function enqueue($data){
$this->queue[$this->size++] = $data;
return $this;
}
/**
* 出隊操作
* @return 空隊列時返回false,否則返回出隊元素
*/
public function dequeue(){
if (!$this->isEmpty()){
--$this->size;
return array_shift($this->queue);
}
return false;
}
/**
* 獲取整個隊列
* @return array 返回整個隊列
*/
public function getAllQueue(){
return $this->queue;
}
/**
* 判斷隊列是否為空
* @return 為空返回true,否則返回false
*/
public function isEmpty(){
return 0===$this->size;
}
/**
* 獲取隊頭元素
* @return 空隊列時返回false,否則返回隊頭元素
*/
public function getFirst(){
if (!$this->isEmpty()){
return $this->queue[0];
}
return false;
}
/**
* 獲取隊列的長度
* @return 返回隊列的長度
*/
public function getSize(){
return $this->size;
}
}
~~~
## 循環隊列的使用
說明:上面定義的隊列,隊列元素出列以后,數組會重新排序,所有的元素向前移動一位,這樣時間復雜度是O(n)




代碼實現:
```
需要注意是PHP中的數組沒有長度限制,比java中的數組高級多了
/**
* 循環隊列,順序存儲
* Class LoopQueue
*/
class LoopQueue
{
public $data;//隊列
private $front;//頭元素指針
private $tail;//尾元素后一個位置指針
private $size;//隊列元素大小
const MAX = 8;//定義最大容量
public function __construct()
{
$this->data = array();
$this->front = 0;
$this->tail = 0;
$this->size = 0;
}
/**
* 查看隊列長度
* @return int 返回隊列長度
*/
public function queueLength(){
//return ($this->tail - $this->front + self::MAX)%self::MAX;
return $this->size;
}
/**
* 入隊列
* @param $e 入隊列的元素
* @return 如果隊列已滿,返回false,如果入隊成功,返回入隊元素
*/
public function enQueue($e){
//查看隊列是否已滿
if (($this->tail + 1)%self::MAX == $this->front){
return false;
}
$this->data[$this->tail] = $e;
$this->tail = ($this->tail + 1)%self::MAX;
$this->size++;
return $e;
}
/**
* 出隊
* @return bool|mixed 隊列為空,返回false;出隊成功,返回出隊元素
*/
public function deQueue(){
//判斷隊列是否為空
if ($this->tail == $this->front){
return false;
}
$e = $this->data[$this->front];
// $this->data[$this->front] = null;
unset($this->data[$this->front]);
$this->front = ($this->front + 1)%self::MAX;
$this->size--;
return $e;
}
}
```
- PHP操作集合
- 獲取字符首字母
- PHP實現定時備份MySQL數據庫
- PHP定時發送郵件
- PHP基本語法
- 總結
- 命名空間
- 錯誤抑制符
- 位運算符
- 原碼,反碼,補碼
- traits
- PHP的反射機制
- const和define的區別
- 語法
- 常用的函數
- 1.變量及打印函數
- 2.引入文件
- 3.常量
- 4.錯誤處理
- 5.面向對象
- 數據結構與算法
- 結構
- 數組
- 索引
- 散列表(哈希表)
- 棧
- 隊列
- 鏈表
- 算法
- 排序算法
- 插入排序
- 冒泡排序
- 選擇排序
- 歸并排序
- 快速排序
- 查找算法
- 二分查找
- 二分查找變形版本1:查詢數據在序列中第一次出現
- 哈希算法
- 算法復雜度
- Smarty模板引擎
- composer
- yaf
- yaf的安裝配置
- 其它
- Java
- JavaSE
- 1.Java發展及JDK安裝配置
- 2.Eclipse的下載及安裝
- 3.Java開發基礎
- 虛擬機
- 2.編輯虛擬機設置
- 1.虛擬機下安裝centos
- 3.安裝vmtools
- Linux
- 1.vi和vim編輯器
- 2.開機、重啟和用戶登錄注銷
- 3.用戶管理
- 4.用戶組管理
- 5.用戶和組的相關文件
- 6.linux運行級別
- 7.幫助指令
- 8.文件目錄類指令
- 9.時間日期類
- 10.搜索查找類
- 11.壓縮和解壓縮
- 12.組管理和權限管理(難點,重點)
- 虛擬主機的配置
- phpstudy快捷配置
- 配置文件配置
- PHP面向對象高級特性
- SPL標準庫(PHP標準庫)
- PHP鏈式操作的實現
- 面向對象編程的基本原則
- 設計模式
- 基本的設計模式