[李景山php]算法系列|php 进行队列操作

时间:2022-06-04 15:22:23
<?php
/**
* Created by PhpStorm.
* User: ziniu
* Date: 2016/9/22
* Time: 16:22
*/


// php 队列 实现

/**
* 队列任务背景:
* php小菜跟新来的美女同事要QQ号码,作为资深美女程序员,给了小菜一串数字2,3,7,4,1,2,9,2,4
* 并且告诉了小菜解密规则:
* 首先将第一个数删除,紧接着将第2个数放到这串数的末尾,再将第3个数删除,并将第4个数放到这串数的末尾,
* 再删除第5个数.....直到剩下最后一个数,将最后一个数也删除,按照刚才删除的顺序,把这些删除的数连在一起
* 就是我们美女同事的QQ号码了!
*/

// 定义 队列 存储对象
/**
* Class queue
*/

class queue{
public $data=[];//初始化队列存储数据
public $head=0;//队列开始【头】位置 【指针】
public $tail=0;//队列结束【尾】位置 【指针】
}
// 初始化队列
$q = new queue();
$q->data = array(2,1,7,4,3,2,9,2,4);
$q->tail = count($q->data);

// 编写处理函数
function getQueue($parameter){
$str = null;// 设置初始化字符串
while($parameter->head < $parameter->tail){// 头尾进行比较
$str .= $parameter->data[$parameter->head];// 保存第一个信息
$parameter->head++;//将头部指针++, 把当前数据从头部位置剔除,
if(isset($parameter->data[$parameter->head])){// 如果 当前 位置 存在数据
// 将当前数据 存到 队列 末尾
$parameter->data[$parameter->tail] = $parameter->data[$parameter->head];
$parameter->tail++;// 增加 队列 头 指针
$parameter->head++;// 增加 队列 尾 指针
}
}
return $str;
}
echo getQueue($q);