php 堆和栈示例,php中堆和栈的使用

这篇文章介绍的内容是关于php中堆和栈的使用,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下

一、关于堆和栈的概念及区别

这里参考上篇博客: 浅谈堆和栈的区别

通过这篇文章,我们可以知道广义的堆和栈到底是什么,但是具体在php中的使用呢

二、php中的堆栈

众所周知,PHP提供了一组函数可以用于push与pop(堆栈)还有shift与unshift(队列)来操作数组元素。

1、push与pop

这两个函数操作的是栈,遵循先进后出的原则。就像是往木桶里面加东西一样。通过array_push进行入栈操作,array_pop进行出栈操作。先进栈的部分在木桶的最下面。

(1)array_push()方法array_push() 函数向第一个参数的数组尾部添加一个或多个元素(入栈),然后返回新数组的长度。该函数等于多次调用 $array[] = $value。

(2)array_pop()方法array_pop() 函数删除数组中的最后一个元素。

返回数组的最后一个值。如果数组是空的,或者非数组,将返回 NULL。

(3)实例:<?php

$arr = array();

array_push($arr,'aaa'); //先入栈 aaa

array_push($arr,'bbb'); //后入栈 bbb

print_r($arr); //此时打印结果为:[0]=>aaa,[1]=>bbb

$arr.pop(); //进行出栈操作,先进后出原则,则此时相当于bbb出栈了。

print_r($arr); //打印结果应该是[0]=>aaa?>

三、php实现的队列

1、什么是队列

首先应该明确,队列和普通的堆栈是不一样的,队列遵循的是“先进先出”。堆栈只能在栈顶删除和插入。队列是每一个新插入的元素都是在队列的尾部插入,每一个要删除的元素都是位于队列的头部,当从队列的头部删除了一个元素后,其它队列中的元素就会向前进1位,在元素移动到队首时,就会接受出队的操作。

队列模型可以理解为排队吃饭。先排队的人就先吃到饭。

2、队列的操作

php中使用array_push()来增加元素,使用array_shift()删除元素。

(1)array_shift()方法array_shift() 函数删除数组中第一个元素,并返回被删除元素的值。

如果键名是数字的,所有元素都会获得新的键名,从 0 开始,并以 1 递增

具体参考手册:http://www.w3school.com.cn/php/func_array_shift.asp

(2)实例:<?php

$arr = array();

array_push($arr,'aaa'); //队列中添加 aaa

array_push($arr,'bbb'); // 队列中添加 bbb

print_r($arr); //此时打印输出为 [0]=>aaa,[1]=>bbb

array_shift($arr); //删除第一个元素,遵循先进先出原则,删除的是aaa

print_r($arr); //打印结果为 [0]=>bbb?>

(3)双端队列

还有一种队列比较特殊,首尾两端都允许进行插入和删除的操作,这种队列可以称为双端队列,与标准的队列不同的就是多了队首的插入操作和队尾的删除操作。一般是通过php的数组函数:array_unshift()和array_shift()。

具体参考:PHP队列原理及基于队列的写文件案例

四、队列的用途

队列可以很好地异步处理数据传送和存储,当你频繁地向数据库中插入数据、频繁地向搜索引擎提交数据,就可采取队列来异步插入。另外,还可以将较慢的处理逻辑、有并发数量限制的处理逻辑,通过消息队列放在后台处理,例如FLV视频转换、发送手机短信、发送电子邮件等。

end

相关推荐:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/555819.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一场事故告诉你zookeeper和nacos谁更适合做注册中心

前言 ​ 在分布式系统中&#xff0c;注册中心充当着重要角色&#xff0c;是服务发现、客户端负载均衡中不可缺少的一员。注册中心除了能够实现基本的功能外&#xff0c;他的稳定性、可用性和健壮性对整个分布式系统的流畅运行影响重大。dubbo作为国内一款主流的分布式系统&…

mysql 排他,mysql 共享锁 排他锁 防插入锁

试验1事务1&#xff1a;#!/usr/bin/pythonimport timeimport MySQLdb;conn MySQLdb.connect(host"localhost",port3306,user"root",passwd"asdf",db"test",unix_socket"/data/mysql_3306/mysql.sock")cursor conn.cursor(…

MySQL操作之JSON数据类型操作详解

MySQL操作之JSON数据类型操作详解 这篇文章主要介绍了MySQL操作之JSON数据类型操作详解&#xff0c;内容较为详细&#xff0c;具有收藏价值&#xff0c;需要的朋友可以参考。 概述 mysql自5.7.8版本开始&#xff0c;就支持了json结构的数据存储和查询&#xff0c;这表明了my…

Mysql执行计划含义,mysql执行计划介绍

烂sql不仅直接影响sql的响应时间&#xff0c;更影响db的性能&#xff0c;导致其它正常的sql响应时间变长。如何写好sql&#xff0c;学会看执行计划至关重要。下面我简单讲讲mysql的执行计划&#xff0c;只列出了一些常见的情况&#xff0c;希望对大家有所帮助。测试表结构&…

Http GET 请求参数中文乱码

Http GET 请求参数中文乱码 两种解决方式 第1种&#xff1a;代码里转换 String name request.getParamter("name"); String nameUtf8 new String(name.getBytes("ISO8859-1"), "UTF-8");第2种&#xff1a;修改Tomcat配置 TOMCAT_HOME/conf…

matlab randomsample,randperm和randsample函数用法对比

构建替代数据的时候&#xff0c;一种常见的思路是打乱原数据的排列次序&#xff0c;通过随机置换原数据的排列次序从而产生和原数据系列统计特征(如均值、方差、分布)一致的随机数据。具体到Matlab中&#xff0c;此思路的实现会涉及到两个命令&#xff1a;randperm和randsample…

SpringBoot的编码问题

第一种方式&#xff1a;直接在配置文件中设置浏览器的解析编码的格式 #设置字符编码 #开启springboot的http字符编码的支持 spring.http.encoding.enabledtrue #强制使用指定字符编码 spring.http.encoding.forcetrue #指定使用的字符编码 spring.http.encoding.charsetUTF-8第…

寄生虫php版,-PHP版SEO最新教材版排名DeDeCms寄生虫V90繁殖

今天视频教程演示说明下PHP寄生虫服务端的使用。主要在很多搭建的过程中会出错&#xff0c;今天主要就讲解下寄生虫配置常见的问题。那么同样也可以看下我们之前的通用版寄生虫使用教程[通用版教程在文件夹中有]&#xff0c;本教程是针对PHP版本的寄生虫服务端进行配置演示。继…

SpringMVC请求参数乱码问题

post 请求方式&#xff1a; 在 web.xml 中配置一个过滤器 <!-- 配置 springMVC 编码过滤器 --><filter><filter-name>CharacterEncodingFilter</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter…

MySQL中 JSON 数据类型应用

前言 今天接触到mysql中json数据类型&#xff0c;之前不知道有这个类型&#xff0c;今天学习一下。 JSON我相信大家都已经很熟悉了&#xff0c;但在 MySQL中&#xff0c;直至 5.7 版本中&#xff0c;才正式引入 JSON数据类型。在次之前&#xff0c;我们通常使varchar或text数…

如何修改matlab中的语句,求大神帮忙看一下这个语句怎么改!!!!!

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼clcclearWimread(e:\matlab\aaa\1.jpg);imshow (W);I rgb2gray(W); % 灰度处理imshow (I);title(灰度图像);Jimnoise(I,salt & pepper,0.2); %椒盐噪声figureimshow (J) ;title(椒盐噪声);Qimnoise(I,gaussian,0,0.01); %高斯…

MySql中json类型的使用___mybatis存取mysql中的json

MySql中json类型的使用 MySQL从5.7.8起开始支持JSON字段&#xff0c;这极大的丰富了MySQL的数据类型。也方便了广大开发人员。但MySQL并没有提供对JSON对象中的字段进行索引的功能&#xff0c;至少没有直接对其字段进行索引的方法。本文将介绍利用MySQL 5.7中的虚拟字段的功能…

百度下拉词+php,百度下拉词是如何生成的?

我们在百度搜索某一词汇的时候&#xff0c;都会在搜索框下面弹出一些相关性和搜索次数比较多的语句或词语&#xff0c;我们在百度上搜索一下&#xff0c;就可以看到用户平时搜索习惯&#xff0c;搜索爱好是什么。护发下拉很多小伙伴就又有疑问了&#xff1a;这些下拉词是根据什…

python元组赋值给变量,Python的赋值

一、序列解包多个赋值操作同时进行&#xff1a;赋值多个值后面再遇到对多个变量赋值时&#xff0c;就不需要对一个变量赋完值再对另一个变量赋值了&#xff0c;用一条语句就可以搞定&#xff0c;例如&#xff1a;再次赋值由输出结果看到&#xff0c;x和y的值交换了&#xff0c;…

微服务,你得知道这

目录 一、业务场景介绍 二、Spring Cloud核心组件&#xff1a;Eureka 三、Spring Cloud核心组件&#xff1a;Feign 四、Spring Cloud核心组件&#xff1a;Ribbon 五、Spring Cloud核心组件&#xff1a;Hystrix 六、Spring Cloud核心组件&#xff1a;Zuul 七、总结 概述…

python新手输出错误,Python 新手常犯错误(第一部分)

用一个可变的值作为默认值这是一个绝对值得放在第一个来说的问题。不仅仅是因为产生这种BUG的原因很微妙&#xff0c;而且这种问题也很难检查出来。思考一下下面的代码片段&#xff1a;def foo(numbers[]):numbers.append(9)print numbers在这里&#xff0c;我们定义了一个 lis…

分布式和微服务的区别

分布式和微服务的区别 1.颜老师&#xff0c;分布式和微服务有什么区别呢&#xff1f;网上说啥的都有&#xff0c;越看越晕了。 答&#xff1a;分布式的核心就一个字&#xff1a;拆。只要是将一个项目拆分成了多个模块&#xff0c;并将这些模块分开部署&#xff0c;那就算是分布…

Oracle数据库空间突然增大,Oracle 表空间异常增长过快解决方法

1. 首先用语句查询容量大于1G的数据段select segment_name,sum(bytes)/1024/1024 from dba_segments group by segment_name having sum(bytes)/1024/1024>1000;得到如下结果&#xff1a;SYS_LOB0000136091C00003$$ 255332MSYS_LOB0000136441C00004$$ 7170MSYS_C…

oracle-04045,Oracle ORA-04045 errors during recompilation/revalidation

About UTLRP.SQL What is UTLRP.SQL?This script recompiles invalid PLSQL modules.NOTE: This script DOES NOT Invalidate any PLSQL modules like utlirp.sql and utlip.sql What this script does?This script recompiles all existing invalid PL/SQL modules in a dat…

分布式和微服务是什么?二者的区别又是什么?

一、分布式系统 在《分布式系统原理与范型》一书中有如下定义&#xff1a; “分布式系统是若干独立计算机的集合&#xff0c;这些计算机对于用户来说就像单个相关系统”&#xff1b; 分布式系统是由一组通过网络进行通信、为了完成共同的任务而协调工作的计算机节点组成的系统…