详解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 论坛采集程序 模拟登陆,抓取页面 实现代码
Jul 09 PHP
javascript,php获取函数参数对象的代码
Feb 03 PHP
在PHP模板引擎smarty生成随机数的方法和math函数详解
Apr 24 PHP
php计算两个文件相对路径的方法
Mar 14 PHP
新浪微博OAuth认证和储存的主要过程详解
Mar 27 PHP
php简单实现快速排序的方法
Apr 04 PHP
WordPress中自定义后台管理界面配色方案的小技巧
Dec 29 PHP
详解PHP匿名函数与注意事项
Mar 29 PHP
PHP操作mysql数据库分表的方法
Jun 09 PHP
php实现websocket实时消息推送
Mar 30 PHP
PHP中“=&gt;
Mar 01 PHP
PHP加MySQL消息队列深入理解
Feb 27 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
ThinkPHP中的常用查询语言汇总
2014/08/22 PHP
PHP从尾到头打印链表实例讲解
2018/09/27 PHP
javascript innerText和innerHtml应用
2010/01/28 Javascript
网页上的Javascript编辑器和代码格式化
2010/04/25 Javascript
JSQL 基于客户端的成绩统计实现方法
2010/05/05 Javascript
jQuery学习基础知识小结
2010/11/25 Javascript
JS正则中的RegExp对象对象
2012/11/07 Javascript
ExtJS4给Combobox设置列表中的默认值示例
2014/05/02 Javascript
JavaScript中exec函数用法实例分析
2015/06/08 Javascript
JavaScript编写点击查看大图的页面半透明遮罩层效果实例
2016/05/09 Javascript
深入理解ECMAScript的几个关键语句
2016/06/01 Javascript
通过JS获取Request.QueryString()参数的值实现方法
2016/09/27 Javascript
JS常见算法详解
2017/02/28 Javascript
详解vue-cli项目中的proxyTable跨域问题小结
2018/02/09 Javascript
微信小程序实现动态显示和隐藏某个控件功能示例
2018/12/14 Javascript
Promise扫盲贴
2019/06/24 Javascript
vue源码中的检测方法的实现
2019/09/26 Javascript
JavaScript实现表单验证功能
2020/12/09 Javascript
跨平台python异步回调机制实现和使用方法
2013/11/26 Python
详解Python的迭代器、生成器以及相关的itertools包
2015/04/02 Python
Python中列表与元组的乘法操作示例
2018/02/10 Python
完美解决Pycharm无法导入包的问题 Unresolved reference
2018/05/18 Python
解决PyCharm同目录下导入模块会报错的问题
2018/10/13 Python
ubuntu 18.04 安装opencv3.4.5的教程(图解)
2019/11/04 Python
分享CSS3中必须要知道的10个顶级命令
2012/04/26 HTML / CSS
美国家居装饰店:Pier 1
2019/09/04 全球购物
JD Sports丹麦:英国领先的运动时尚零售商
2020/11/24 全球购物
《鹬蚌相争》教学反思
2014/04/22 职场文书
我的大学生活演讲稿
2014/04/25 职场文书
关爱留守儿童标语
2014/06/18 职场文书
妇女工作先进事迹
2014/08/17 职场文书
教师思想作风整顿个人剖析材料
2014/10/10 职场文书
毕业论文致谢信
2015/05/14 职场文书
亮剑观后感500字
2015/06/05 职场文书
Go Gin实现文件上传下载的示例代码
2021/04/02 Golang
HTML5基础学习之文本标签控制
2022/03/25 HTML / CSS