详解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中cookies使用指南
Mar 16 PHP
PHP类的使用 实例代码讲解
Dec 28 PHP
关于IIS php调用com组件的权限问题
Jan 11 PHP
php多维数组去掉重复值示例分享
Mar 02 PHP
PHP使用range协议实现输出文件断点续传代码实例
Jul 04 PHP
PHP中大于2038年时间戳的问题处理方案
Mar 03 PHP
PHP输出缓冲控制Output Control系列函数详解
Jul 02 PHP
php实现QQ空间获取当前用户的用户名并生成图片
Jul 25 PHP
Zend Framework教程之Zend_Helpers动作助手ViewRenderer用法详解
Jul 20 PHP
php读取XML的常见方法实例总结
Apr 25 PHP
Thinkphp5框架实现图片、音频和视频文件的上传功能详解
Aug 27 PHP
laravel 查询数据库获取结果实现判断是否为空
Oct 24 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的性能
2013/10/30 PHP
PHP实现过滤掉非汉字字符只保留中文字符
2015/06/04 PHP
php结合curl实现多线程抓取
2015/07/09 PHP
php+ajax无刷新分页实例详解
2015/12/07 PHP
Yii控制器中filter过滤器用法分析
2016/07/15 PHP
PHP实现负载均衡的加权轮询方法分析
2018/08/22 PHP
一个无限级XML绑定跨框架菜单(For IE)
2007/01/27 Javascript
javascript import css实例代码
2008/07/18 Javascript
jquery 页面全选框实践代码
2010/04/02 Javascript
基于jQuery的图片剪切插件
2011/08/03 Javascript
jquery遍历数组与筛选数组的方法
2013/11/05 Javascript
js字母大小写转换实现方法总结
2013/11/13 Javascript
浅谈js函数的多种定义方法与区别
2016/11/29 Javascript
nodejs连接mysql数据库简单封装示例-mysql模块
2017/04/10 NodeJs
vue高德地图之玩转周边
2017/06/16 Javascript
深入理解Webpack 中路径的配置
2017/06/17 Javascript
在Js页面通过POST传递参数跳转到新页面详解
2017/08/25 Javascript
基于Vue-cli快速搭建项目的完整步骤
2018/11/03 Javascript
Vue 理解之白话 getter/setter详解
2019/04/16 Javascript
基于JS实现web端录音与播放功能
2019/04/17 Javascript
生产制造追溯系统之再说条码打印
2019/06/03 Javascript
python实现用户管理系统
2018/01/10 Python
python实现飞机大战微信小游戏
2020/03/21 Python
Python中base64与xml取值结合问题
2019/12/22 Python
python爬虫请求头设置代码
2020/07/28 Python
HTML5时代CSS设置漂亮字体取代图片
2014/09/04 HTML / CSS
详解HTML5中的Communication API基本使用方法
2016/01/29 HTML / CSS
全球性的在线时尚男装零售商:boohooMAN
2016/12/17 全球购物
荷兰网上药店:Drogisterij.net
2019/09/03 全球购物
学前教育教师求职自荐信
2013/09/22 职场文书
医学生职业规划范文
2014/01/05 职场文书
消防战士优秀事迹材料
2014/02/13 职场文书
《母亲的恩情》教学反思
2014/02/13 职场文书
股东协议书
2014/04/14 职场文书
防汛工作情况汇报
2014/10/28 职场文书
办公室主任岗位职责范本
2015/03/31 职场文书