PHP实现循环队列(顺序结构)

简介:

队列:先进先出,是一个应用很广泛的数据结构,不管是存储还是消息,还是待执行任务等等,生活以及软件中使用的栗子比比皆是。


不多说直接上代码,参考多家,觉得这个是最符合中心思想的。为了区分是否满队列,我们还是j决定使用空一格是满的,示意图如下

wKioL1lwlnCwmTTVAAJBGlEjR8c807.png



直接上代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
//循环队列,顺序存储
class  queue{
     private  $data ;
     private  $front ;
     private  $rear ;
     
     //定义最大容量
     const  MAX=5;
     //定义数量
      //初始化队列,头指针和尾指针都只指向0,而且我们的满规定是空一个。
     function  __construct(){
         $this ->data= array ();
         $this ->front=0;
         $this ->rear=0;
         
         echo  "队列准备ok" ;
     }
     //一个有趣的小公式,因为我们规定中间间隔一个就是满了,原理和示意图用图片
     public  function  queueLength(){
         echo  ( $this ->rear- $this ->front+self::MAX)%self::MAX;
     }
     
     //入队列
     //没必要加入本队列参数,用$this
     public  function  inQueue( $e ){
         if (( $this ->rear+1)%(self::MAX)== $this ->front){
             echo  '队列已经满了' ; die ;
         }
         
         $this ->data[ $this ->rear]= $e ;
         $this ->rear=( $this ->rear+1)%(self::MAX);
         
         echo  'ok' ;
     }
     
     public  function  deQueue(){
         if ( $this ->front== $this ->rear){
             echo  '队列是空的' ; die ;
         }
         //var $tmp;
         //$tmp =
         $this ->data[ $this ->front]= '' ;
         $this ->front = ( $this ->front+1)%self::MAX;
         //unset($this->data[$this->front]);
         
         echo  'ok' ;
     }
}

测试代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
     $obj = new  queue();
$obj ->inQueue(1);
$obj ->inQueue(2);
var_dump( $obj );
$obj ->deQueue();
var_dump( $obj );
$obj ->inQueue(3);
var_dump( $obj );
$obj ->inQueue(4);
var_dump( $obj );
$obj ->inQueue(5);
var_dump( $obj );
$obj ->deQueue();
var_dump( $obj );
$obj ->deQueue();
var_dump( $obj );
$obj ->deQueue();
var_dump( $obj );
$obj ->deQueue();
var_dump( $obj );
$obj ->queueLength();
$obj ->inQueue(1);
var_dump( $obj );
$obj ->inQueue(2);
var_dump( $obj );

有一首小诗我觉得作者写的很好,增加点文学气息

wKiom1lwl1CjN9PdAAIuKwQDA88460.png

wKioL1lwl1HBICNBAAJMyh01H_Y993.png



谢谢,愿法界众生,皆得安乐

本文转自 jackdongting 51CTO博客,原文链接:http://blog.51cto.com/10725691/1949508


相关文章
|
PHP 开发者
PHP中的命名空间:优雅解决代码冲突与组织结构
在PHP开发中,命名空间是一种重要的工具,可以帮助开发者避免代码冲突、提高代码组织结构和可读性。本文将深入探讨PHP中命名空间的概念、使用方法以及实际应用场景,帮助读者更好地理解和运用命名空间来优化他们的PHP代码。
|
11月前
|
缓存 监控 算法
内网监控管理软件:PHP 语言队列算法揭秘
在数字化办公环境中,内网监控管理软件对企业的稳定运行和信息安全至关重要。本文深入介绍PHP中的队列算法及其在内网监控软件中的应用,包括监控数据收集、任务调度和日志记录等场景,通过代码示例展示其实现方法。队列算法可提高性能、保证数据顺序并实现异步处理,为企业提供高效的安全保障。
202 1
|
自然语言处理 前端开发 JavaScript
php结构
php结构
185 1
|
设计模式 算法 数据库连接
PHP中的设计模式:如何优化你的代码结构
在本文中,我们将深入探讨PHP中的设计模式。设计模式是解决常见软件设计问题的最佳实践。它们不是具体的代码,而是一种编程经验的总结。掌握设计模式可以帮助你写出更高效、灵活和可维护的代码。本文将介绍几种常见的设计模式,并通过示例展示如何在PHP项目中应用这些模式。无论你是PHP初学者还是有经验的开发者,都能从本文中获得启发和实用的技巧。
|
消息中间件 NoSQL Go
PHP转Go系列 | ThinkPHP与Gin框架之Redis延时消息队列技术实践
【9月更文挑战第7天】在从 PHP 的 ThinkPHP 框架迁移到 Go 的 Gin 框架时,涉及 Redis 延时消息队列的技术实践主要包括:理解延时消息队列概念,其能在特定时间处理消息,适用于定时任务等场景;在 ThinkPHP 中使用 Redis 实现延时队列;在 Gin 中结合 Go 的 Redis 客户端库实现类似功能;Go 具有更高性能和简洁性,适合处理大量消息。迁移过程中需考虑业务需求及系统稳定性。
387 1
|
存储 关系型数据库 MySQL
PHP的基本语法和结构
【5月更文挑战第22天】PHP的基本语法和结构
165 2
|
PHP
【web 开发基础】PHP的流程控制之单一分支结构-PHP 快速入门(12)
流程控制对于任何一门编程语言来说都是至关重要的,它提供了控制程序步骤的基本手段,是程序的核心部分。可以说,缺少了流程控制,就不会有程序设计语言,因为没有哪一种程序只是线性的执行语句序列。程序中需要与用户相互交流,需要根据用户的输入决定执行语句序列,需要有循环将代码反复执行等操作。这些都少不了流程控制。在任何程序设计语言中都需要支持满足程序结构化所需要的三种基本结构:顺序结构、分支结构、和循环结构;没有这些流程控制,编程会变得更加机械,犹如人没有了灵魂。
238 1
|
关系型数据库 MySQL PHP
php使用webSocket实现Echarts长连接自动刷新的解决方案(3):获取读取数据库数据队列进行实时刷新
php使用webSocket实现Echarts长连接自动刷新的解决方案(3):获取读取数据库数据队列进行实时刷新
354 0
|
NoSQL 算法 PHP
Redis 延迟队列实现(基于PHP)
顾名思义,延迟队列就是进入该队列的消息会被延迟消费的队列。 例如:滴滴打车订单完成后,如果用户一直不评价,48小时后会将自动评价为5星。
475 0
PHP——控制结构
PHP——控制结构