详解PHP队列的实现


Posted in PHP onMarch 14, 2019

队列是一种特殊的线性表,它只允许在表的前端,可以称之为front,进行删除操作;而在表的后端,可以称之为rear进行插入操作。队列和堆栈一样,是一种操作受限制的线性表,和堆栈不同之处在于:队列是遵循“先进先出”原则,而堆栈遵循的是“先进后出”原则。队列进行插入操作的端称为队尾,进行删除操作的称为队头,只允许在队尾进行插入操作,在队头进行删除操作。
队列的数据元素又称为队列元素,在队尾中插入一个元素称为入队,在队头删除一个元素称为出队。具体实现参考代码:

<?php
/**
* php队列算法
* 
* Create On 2010-6-4
* Author Been
* QQ:281443751
* Email:binbin1129@126.com
**/
class data {
  //数据
  private $data;
  
  public function __construct($data){
    $this->data=$data;
    echo $data.":哥进队了!<br>";
  }
  
  public function getData(){
    return $this->data;
  }
  public function __destruct(){
    echo $this->data.":哥走了!<br>";
  }
}
class queue{
  protected $front;//队头
  protected $rear;//队尾
  protected $queue=array('0'=>'队尾');//存储队列
  protected $maxsize;//最大数
  
  public function __construct($size){
    $this->initQ($size);
  }
  //初始化队列
  private function initQ($size){
    $this->front=0;
    $this->rear=0;
    $this->maxsize=$size;
  }
  //判断队空
  public function QIsEmpty(){
    return $this->front==$this->rear;
  }
  //判断队满
  public function QIsFull(){
    return ($this->front-$this->rear)==$this->maxsize;
  }
  //获取队首数据
  public function getFrontDate(){
    return $this->queue[$this->front]->getData();
  }
  //入队
  public function InQ($data){
    if($this->QIsFull())echo $data.":我一来咋就满了!(队满不能入队,请等待!)<br>";
    else {
      $this->front++;
      for($i=$this->front;$i>$this->rear;$i--){
        //echo $data;
        if($this->queue[$i])unset($this->queue[$i]);
        $this->queue[$i]=$this->queue[$i-1];
      }
      $this->queue[$this->rear+1]=new data($data);
      //print_r($this->queue);
      //echo $this->front;
      echo '入队成功!<br>';
    }
  }
  //出队
  public function OutQ(){
    if($this->QIsEmpty())echo "队空不能出队!<br>";
    else{
      unset($this->queue[$this->front]);
      $this->front--;
      //print_r($this->queue);
      //echo $this->front;
      echo "出队成功!<br>";
    }
  }
}
$q=new queue(3);
$q->InQ("小苗");
$q->InQ('马帅');
$q->InQ('溜冰');
$q->InQ('张世佳');
$q->OutQ();
$q->InQ("周瑞晓");
$q->OutQ();
$q->OutQ();
$q->OutQ();
$q->OutQ();

本案例中有两个类:

第一个是data类,用于实现数据的存放以及队列元素的入队出队情况;

第二个是queue类,用于队列元素的一些入队出队操作。

队列中包含四个属性:

front(队列的头部)

rear(队列的尾部)

maxsize(队列的长度,即队列元素个数)

queue(存放所有已入队队列元素的对象)

场景说明:

1.初始化队列时,生成一个队列,传入一个参数作为maxsize初始化队列把队尾rear设为0,队头front也设为0,此时queue中只有0号元素,并且rear和front都指向它。

2.入队时,先需要判断队列是否已满(front-rear == maxsize),如果已满不可在插入,如果未满则允许插入。插入时,front自增,然后依次让队列所有元素向前移动一位(让出队尾位置以便插入新元素),然后生成新的data对象插入到队尾位置。

3.出队时,判断队列是否为空(front == rear),如果为空时,无法出队。如果不为空时,删除front指向的对象,并且front自减,完成出队。

运行结果如下:

小苗:哥进队了!
入队成功
马帅:哥进队了!
入队成功
溜冰:哥进队了!
入队成功
张世佳:我一来咋就满了!(队满不能入队,请等待!)
小苗:哥走了!
出队成功!
周瑞晓:哥进队了!
入队成功
马帅:哥走了!
出队成功!
溜冰:哥走了!
出队成功!
周瑞晓:哥走了!
出队成功!
队空不能出队!
队空不能出队!

 以上所述是小编给大家介绍的PHP队列的实现详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

PHP 相关文章推荐
php 将bmp图片转为jpg等其他任意格式的图片
Jun 21 PHP
php 无极分类(递归)实现代码
Jan 05 PHP
解析php中die(),exit(),return的区别
Jun 20 PHP
PHP生成随机密码类分享
Jun 25 PHP
基于OpenCart 开发支付宝,财付通,微信支付参数错误问题
Oct 01 PHP
PHP附件下载中文名称乱码的解决方法
Dec 17 PHP
ThinkPHP设置禁止百度等搜索引擎转码(简单实用)
Feb 15 PHP
Ajax中的JSON格式与php传输过程全面解析
Nov 14 PHP
详解PHP文件的自动加载(autoloading)
Feb 04 PHP
PHP设计模式之状态模式定义与用法详解
Apr 02 PHP
windows环境下使用Composer安装ThinkPHP5
May 18 PHP
PHP函数积累总结
Mar 19 PHP
PHP精确到毫秒秒杀倒计时实例详解
Mar 14 #PHP
PHP的简单跳转提示的实现详解
Mar 14 #PHP
PHP封装的数据库模型Model类完整示例【基于PDO】
Mar 14 #PHP
PHP模型Model类封装数据库操作示例
Mar 14 #PHP
php中pcntl_fork创建子进程的方法实例
Mar 14 #PHP
PHP7内核之Reference详解
Mar 14 #PHP
掌握PHP垃圾回收机制详解
Mar 13 #PHP
You might like
php 分页原理详解
2009/08/21 PHP
php 记录进行累加并显示总时长为秒的结果
2011/11/04 PHP
PHP判断数据库中的记录是否存在的方法
2014/11/14 PHP
php使用curl通过代理获取数据的实现方法
2016/05/16 PHP
PHP培训要多少钱
2017/06/06 PHP
Javascript 5种方法实现过滤删除前后所有空格
2016/06/22 Javascript
JS实现的五级联动菜单效果完整实例
2017/02/23 Javascript
老生常谈angularjs中的$state.go
2017/04/24 Javascript
JS图片轮播与索引变色功能实例详解
2017/07/06 Javascript
Angularjs添加排序查询功能的实例代码
2017/10/24 Javascript
Vue 2.0双向绑定原理的实现方法
2019/10/23 Javascript
electron 如何将任意资源打包的方法步骤
2020/04/16 Javascript
vue+element实现图片上传及裁剪功能
2020/06/29 Javascript
Vue项目配置跨域访问和代理proxy设置方式
2020/09/08 Javascript
Javascript异步流程控制之串行执行详解
2020/09/27 Javascript
如何构建一个Vue插件并生成npm包
2020/10/26 Javascript
python获取标准北京时间的方法
2015/03/24 Python
编写Python脚本来获取Google搜索结果的示例
2015/05/04 Python
使用Python的urllib2模块处理url和图片的技巧两则
2016/02/18 Python
Python实现FTP上传文件或文件夹实例(递归)
2017/01/16 Python
详解使用python的logging模块在stdout输出的两种方法
2017/05/17 Python
Python3 伪装浏览器的方法示例
2017/11/23 Python
Python解决线性代数问题之矩阵的初等变换方法
2018/12/12 Python
django实现模板中的字符串文字和自动转义
2020/03/31 Python
基于Tensorflow一维卷积用法详解
2020/05/22 Python
网购亚洲时装、美容产品和生活百货:YesStyle
2016/09/15 全球购物
奥地利网上书店:Weltbild
2017/07/14 全球购物
无谷物狗粮:Pooch & Mutt
2018/05/23 全球购物
英国马匹装备和马术用品购物网站:Equine Superstore
2019/03/03 全球购物
企业授权委托书范本
2014/04/02 职场文书
财产公证书
2014/04/10 职场文书
2014年最新领导班子整改方案
2014/09/27 职场文书
公司离职证明标准格式
2014/11/18 职场文书
统计员岗位职责范本
2015/04/14 职场文书
导游词之澳门妈祖庙
2019/12/19 职场文书
Oracle中DBLink的详细介绍
2022/04/29 Oracle