栈,堆,队列

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

堆栈是 两种数据结构。堆栈都是一种数据项按序排列的数据结构,只能在一端(称为栈顶(top))对数据项进行插入和删除。在单片机应用中,堆栈是个特殊的存储 区,主要功能是暂时存放数据和地址,通常用来保护断点和现场。要点:堆,队列优先,先进先出(FIFO—first in first out)。栈,先进后出(FILO—First-In/Last-Out)。
二、php中的堆栈

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

1、push与pop

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

(1)array_push()方法

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

    1

(2)array_pop()方法

array_pop() 函数删除数组中的最后一个元素。
返回数组的最后一个值。如果数组是空的,或者非数组,将返回 NULL。

    1
    2

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

    1
    2
    3
    4
    5
    6
    7
    8

三、php实现的队列

1、什么是队列

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

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

2、队列的操作

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

(1)array_shift()方法

array_shift() 函数删除数组中第一个元素,并返回被删除元素的值。
如果键名是数字的,所有元素都会获得新的键名,从 0 开始,并以 1 递增

    1
    2

具体参考手册: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
?>

    1
    2
    3
    4
    5
    6
    7
    8

(3)双端队列

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

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值