PHP实现双向队列

   作为开发人员,经常会在项目中遇使用到队列,而有时候需要自己单独实现队列机制,而也有部分新手对与队列认识不清晰,本教程,从代码上,直观的展示了队列的实现 和使用过程。
<?php
/**
 * @Function 双向队列实现
 *
 *
 * @author   yg-w
 *
 * @date    2017-12-23
 *
 */

class queue{

    private $list   = [];

    private static $instance;

    /**
     *
     * @Function 实例化
     *
     * @return queue
     *
     */
    public static function getInstance(){
        if(!self::$instance instanceof self){
            self::$instance = new self();
        }
        return self::$instance;
    }

    /**
     * @Function 入队-首部
     *
     * @param $val
     *
     * @desc:
     *     需要注意的是,要向队列的首位插入新的值,则需要先将该队列的所有元素位置向后移
     *
     *     动一位,完成后,在最后空下来的第一个位置插入新的值。
     *
     * @return boolean
     */
    public function push_first($val){
        return array_unshift($this->list,$val);
    }

    /**
     * @Function 入队-尾部
     *
     * @param $val
     *
     * @return boolean
     *
     */
    public function push_last($val){
        return array_push($this->list,$val);
    }

    /**
     * @Function 出队-首位
     *
     * @desc
     *       需要注意的是,每次从首位置删除一个元素后,需要将队列中所有剩余的元素向前移动一位。
     *
     *
* @return string */ public function pop_first(){ return array_shift($this->list); } /** * @Function 出队-尾部 * * @return string * */ public function pop_last(){ return array_pop($this->list); } /** * * @Function 查看队列当前情况( 仅用于测试 ) * * @return array * */ public function get_list(){ return $this->list; }}//实例化队列类$queue = queue::getInstance();/** * 从队列首位入队: $queue->push_first() * 从队列尾部入队: $queue->push_last() *///向队列首位插入20次for($i=1;$i<=20;$i++){ $queue->push_first($i); echo "入队: ".$i.PHP_EOL;}/** * 从前到后出队: $queue->pop_first() * 从后到前出队: $queue->pop_last() *///从尾部进行出队操作 : 当队列中所有元素出队后,结束执行while($p_val = $queue->pop_last()) { echo "出队: ".$p_val . PHP_EOL;}var_dump($queue->get_list());运行结果入队1入队2入队3入队4入队5入队6入队7入队8入队9入队10入队11入队12入队13入队14入队15入队16入队17入队18入队19入队20出队1出队2出队3出队4出队5出队6出队7出队8出队9出队10出队11出队12出队13出队14出队15出队16出队17出队18出队19出队20array(0) {} 如有疑问,或有更好的方法,欢迎留言讨论!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值