视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
php 如何实现队列
2020-11-03 23:10:52 责编:小采
文档

php如何实现队列?

此队列算法中有两个类:

  第一个是data类,这个类是存放数据;

  第二个是queue类,也就是队列类这个就是队列的一些操作;

首先队列里包含四个属性:

  front(队列的头,也就是出队是要出去的)

  rear(队列的尾部在这里永远指向0)

  queue(存放所有入队的data对像,queue中默认存在一个元素当空时front和rear都指向他)

  maxsize(队列的长度)

应用说明:

1初始化队列:生成一个队列传入一个参数作为maxsize初始化队列把rear设为0 ,front设为0此时queue中只有0号元素rear和front都指向他

2.入队:判断队列是否已满(front-rear==maxsize),如果满提示,若果没满先让front+1,然后让所有队列中的元素像前移动一位(也就是给新来的让出队尾位置),然后生成data对象插入到队尾+1的位置。此时入队成功!

3.出队:判断队列是否为空(front==rear),如空提示,如不为空,删除front指向的对象,front-1(向后移动一位),出队成功!

<?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();

运行结果:

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

下载本文
显示全文
专题