[TOC]
# 队列
定义:
* 队列是一种线性结构,来自线性表数据结构,“操作受限”的线性表
* 是先进先出的线性表,队列只允许在队首出队,队尾入队
![](https://i.vgy.me/uC1MNb.png)
# 队列的类型
* 用数组实现
* 用链表实现
# 队列的应用
## 通过数组实现队列
~~~
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)
![](https://i.vgy.me/IMiyhz.png)
![](https://i.vgy.me/3RINwA.png)
![](https://i.vgy.me/7C42nc.png)
![](https://i.vgy.me/XUlZr3.png)
代码实现:
```
需要注意是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链式操作的实现
- 面向对象编程的基本原则
- 设计模式
- 基本的设计模式