原生PHP实现队列与栈

原创 2015年12月22日 15:35:35

队列

队列(queue)是常用的数据结构之一,它是一种特殊的线性表,受到操作的限制,只能在尾部进行插入操作,在头部进行删除操作。
队列遵循先入先出(FIFO,First In First Out)的原则,每一个新插入的元素都是在队列的尾部插入,每一个要删除的元素都是位于队列的头部,当从队列的头部删除了一个元素后,其它队列中的元素就会向前进1位,在元素移动到队首时,就会接受出队的操作。
还有一种队列比较特殊,首尾两端都允许进行插入和删除的操作,这种队列可以称为双端队列,与标准的队列不同的就是多了队首的插入操作和队尾的删除操作。
这里写图片描述
原生PHP的数组就可以用来实现队列操作,一个队列所需要实现的基本操作如下所示:

  1. 队尾入队
  2. 队首出队
  3. 队列元素统计
  4. 取队首元素
  5. 取队尾元素
  6. 清空队列
  7. 队尾出队(仅用于双端队列)
  8. 队首入队(仅用于双端队列)

实现一个队列操作的类,称为queueOp.class.php,如下所示:

<?php
/*
 * PHP实现队列操作类
 */
class queueOp {
    /*
     * 队尾入队
     * Return:处理之后队列的元素个数
     */
    public function tailEnqueue($arr,$val) {
        return array_push($arr,$val);
    }

    /*
     * 队尾出队
     * Return:最后一个值,如果数组为空或不是数组,返回NULL
     * Comment:仅用于双向队列
     */
    public function tailDequeue($arr) {
        return array_pop($arr);
    }

    /*
     * 队首入队
     * Return:处理之后队列的元素个数
     * Comment:仅用于双向队列
     */
    public function headEnqueue($arr,$val) {
        return array_unshift($arr,$val);
    }

    /*
     * 队首出队
     * Return:移出的值,如果参数不是数组或数组为空,返回NULL
     */
    public function headDequeue($arr) {
        return array_shift($arr);
    }

    /*
     * 队列长度
     * Return:返回队列的长度(元素个数)
     */
    public function queueLength($arr) {
        return count($arr);
    }

    /*
     * 获取队首元素
     * Return:第一个元素的值,如果队列为空则返回FALSE
     */
    public function queueHead($arr) {
        return reset($arr);
    }

    /*
     * 获取队尾元素
     * Return:最后一个元素的值,如果队列为空则返回FALSE
     */
    public function queueTail($arr) {
        return end($arr);
    }

    /*
     * 清空队列
     * Return:无返回值
     */
    public function clearQueue($arr) {
        unset($arr);
    }
}

栈(stack)与队列相似,都是操作受到了限制的表,不同的是栈实行的是先入后出的原则,先进入的元素会被压到栈底,后进入的元素位于栈顶,栈只会对栈顶一端的元素进行操作,栈的操作包括入栈和出栈,都是从栈顶端进行操作。
这里写图片描述
PHP实现栈与实现队列极其相似,了解了栈的原理之后,只需要将队列部份的类实现代码去除队列头部的插入与删除操作,即可成为栈的操作类,只需将队尾换成栈顶,队首换成栈底即可。

版权声明:本文为博主原创文章,转载请标明出处。

PHP实现队列及队列原理

队列是一种线性表,按照先进先出的原则进行的: 看看各语言实现队列的方法: PHP实现队列:第一个元素作为队头,最后一个元素作为队尾 php/** * 队列就是这么简单 * * @link http...
  • woshihaiyong168
  • woshihaiyong168
  • 2016年10月18日 09:48
  • 8377

PHP实现队列(Queue)数据结构

队列(Queue),是一种特殊的先进先出线性表,其只能在前端进行删除操作(一般称为出队),在后端进行插入操作(一般称为入队)。进行删除操作的端称为队头,进行插入操作的端称为队尾。队列,是按照先进先出或...
  • zqtsx
  • zqtsx
  • 2013年06月27日 16:18
  • 3388

PHP队列处理-ZeroMQ

一、ZeroMQ 的背景介绍   引用官方的说法: “ZMQ (以下 ZeroMQ 简称 ZMQ)是一个简单好用的传输层,像框架一样的一个 socket library,他使得 Socket 编...
  • lumengabc
  • lumengabc
  • 2014年01月24日 13:44
  • 2651

PHP实现队列及队列原理

队列是一种线性表,按照先进先出的原则进行的: PHP实现队列:第一个元素作为队头,最后一个元素作为队尾 /** * 队列就是这么简单 * * @link */$array =  ...
  • yilovexing
  • yilovexing
  • 2016年11月10日 17:38
  • 2634

PHP的简单队列程序,写文件实现队列

最近有个项目,因为服务器权限问题,没办法安装安装队列程序,而且并发300+,服务商的数据库最大连接数是300,为了解决这个问题所以编写了一个简单的队列程序,代码如下读队列代码:...
  • u012228558
  • u012228558
  • 2016年04月16日 15:25
  • 2129

PHP使用数组实现队列(实际就是先进先出如何实现)

PHP的数组处理函数还可以将数组实现队列,堆栈是“先进后出”。在堆栈中,最后压入的数据(进栈),将会被最先弹出(出栈)。而队列是先进先出,就如同银行的排号机 PHP中将数组当...
  • qq1355541448
  • qq1355541448
  • 2015年07月16日 14:53
  • 2038

php栈和队列

php 里面没有栈和队列 的数据结构,但是可以通过数组来模拟:1 栈 先进后出表,后进先出表$arr = array(); array_push($arr, 'aaa');//aaa 压入栈 arra...
  • gongstrong123
  • gongstrong123
  • 2016年03月24日 11:51
  • 852

PHP高级编程之消息队列

1. 什么是消息队列 消息队列(英语:Message queue)是一种进程间通信或同一进程的不同线程间的通信方式 2. 为什么使用消息队列 消息队列技术是分...
  • luyaran
  • luyaran
  • 2016年11月04日 14:27
  • 11327

PHP解决抢购、秒杀、抢楼、抽奖等阻塞式高并发库存防控超量的思路方法

如今在电商行业里,秒杀抢购活动已经是商家常用促销手段。但是库存数量有限,而同时下单人数超过了库存量,就会导致商品超卖甚至库存变负数的问题。 又比如:抢购火车票、论坛抢楼、抽奖乃至爆红微博评论等也会引...
  • jimlong
  • jimlong
  • 2015年08月20日 11:12
  • 24915

PHP的轻量消息队列php-resque使用说明

消息队列处理后台任务带来的问题 项目中经常会有后台运行任务的需求,比如发送邮件时,因为要连接邮件服务器,往往需要5-10秒甚至更长时间,如果能先给用户一个成功的提示信息,然后在后台慢慢处理发送邮件的...
  • index_ling
  • index_ling
  • 2017年02月25日 10:06
  • 789
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:原生PHP实现队列与栈
举报原因:
原因补充:

(最多只允许输入30个字)