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

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队列的实现,看完秒懂相关推荐

  1. 2个字节能存多少个16进制_Java语言中最大的整数再加1等于多少?看完秒懂

    短文涨姿势,看了不白看,不关注等啥? 已知Java语言中int类型所能表示的最大整数为2147483647,请问以下代码执行结果是什么? 一部分人都会认为这段程序压根就无法通过编译,也有人认为,这段程 ...

  2. win10系统文件拖拽卡顿_终于找到Win10卡顿病根了!看完秒懂

    原标题:终于找到Win10卡顿病根了!看完秒懂 我们知道Win10自带了杀毒方案Windows Defender,但这在提高安全性的同时,在某些场景也带来了卡顿. 例如开启内藏大量exe的文件夹的时候 ...

  3. 计算机硬件发展慢,老电脑卡慢应该更换哪些硬件?看完秒懂

    原标题:老电脑卡慢应该更换哪些硬件?看完秒懂 现如今时代的发展可以说的上是突飞猛进,许多高科技的东西也是出现在我们生活当中,同时也承担起了重要的作用.就拿电子产品电脑来讲,也是满足了不同用户的需求. ...

  4. 台式计算机里的电池有啥用,电脑主板上的电池有什么用?看完秒懂!

    众所周知,电脑主板上面有一块纽扣电池,但很多人不知道主板上的电池是干什么用的,今天小编就来说说这个主板上不起眼的电池有什么用,电脑小白不妨跟随小编来科普一下,看完秒懂! 主板电池作用 1.系统时间 如 ...

  5. modbus rtu与计算机通讯,Modbus通讯协议原来是这么回事!看完秒懂了

    原标题:Modbus通讯协议原来是这么回事!看完秒懂了 [www.gkwo.net]工程师必备网站 导语:ModBus网络是一个工业通信系统,由带智能终端的可编程序控制器和计算机通过公用线路或局部专用 ...

  6. 查看计算机配置讲解,教您如何看显示器参数!电脑显示器常见参数详解,看完秒懂!...

    由于显示器可选的范围比较广,同一个尺寸大小的显示器,不同品牌不同型号不同参数会有上百种可供选择,其实我们只需明确了预算与用途,才可以正确选择合适自己的显示器.那么如何看显示器参数?下面装机之家分享一下 ...

  7. 电感饱和怎么判断? 看完秒懂

    电感饱和怎么判断? 看完秒懂 电感饱和的原因 先直观的认识下什么是电感饱和,如图1: 图1 我们知道当图1线圈中通过电流时,线圈会产生磁场: 磁芯在磁场的作用下会被磁化,其内部磁畴会慢慢旋转: 当磁芯 ...

  8. 无盘服务器大内存的好处,4GB+64GB够用?看完秒懂,原来大内存还有那么多好处...

    原标题:4GB+64GB够用?看完秒懂,原来大内存还有那么多好处 随着智能手机的普及,手机APP也随之而来,成了我们生活的一部分.但是,随着APP数量的增多和体量的增大,也占据了手机的大部分内存,让不 ...

  9. android wifi wlan,看完秒懂WiFi和WLAN的区别

    如今,移动网络已经成为我们生活中必不可少的一部分,很多人到某一个地方都会问,这里有WiFi吗?或者说有WLAN?甚至有人将其归为马斯洛第六需求.那么WiFi和WLAN有什么区别? WLAN(无线局域网 ...

  10. 白话23 种设计模式,看完秒懂!

    你知道的越多,不知道的就越多,业余的像一棵小草! 成功路上并不拥挤,因为坚持的人不多. 编辑:业余草 zhuanlan.zhihu.com/p/100746724 推荐:https://www.xtt ...

最新文章

  1. 【读书笔记】知易行难,多实践
  2. 了解机器学习回归的3种最常见的损失函数
  3. 中国北斗全球系统核心星座将于2019年年底部署完成
  4. win7安装mysql-5.7.18
  5. 准备好做个硬核科技青年了么?| 【2019科技创新者大会】限时免费报名中
  6. 通过xshell在linux上安装mysql5.7(终极版)
  7. linux之位置参数
  8. 使用WebService的方式调用部署在服务器的Wcf服务
  9. 公共代码之密码加解密
  10. SQL server连接数据库
  11. 流量红利不再,餐企做私域流量要趁早
  12. caffe转onnx总结
  13. 计算机运行黑屏显示器正常,电脑主机运行正常显示器黑屏怎么办
  14. mysql choose when_mybatis 基础(二) 动态sql 关于where if / where choose when otherwise
  15. 读取NTFS的USN(获取文件的历史操作记录,即使这个文件已被删除)
  16. linux fontconfig字体报错问题
  17. python字典方法有三种_介绍三种访问字典的方法
  18. 在Jetson Nano上十行代码实现目标检测(jetson_inference)
  19. Redis内存空间简单分析
  20. 【渝粤教育】电大中专计算机职业素养 (9)作业 题库

热门文章

  1. 定积分分部积分典型例题_定积分典型例题20例答案
  2. Ubuntu16.04 + cuda8.0 + GTX1080 + matlab14.04a + Opencv3.0 + caffe 安装教程
  3. 计算机上u盘打不开,u盘打不开怎么办,插在电脑上有显示,但是打不开?
  4. UCI糖尿病数据利用逻辑回归算法进行训练和预测
  5. 如何旋转PDF页面并保存
  6. datatables加载表格数据入门
  7. 苹果Appstore加急审核方法
  8. 如何选择产品关键词?
  9. 分享2个ICON资源链接
  10. 区块链学习笔记20——权益证明