<?php /** * Class MyList * 队列,先进先出,头部出,尾部入 * * */ class MyList { //队列头索引 private $head_index = 0; //出队的内容 private $out_value; //入队的内容 private $in_value; //队列数组 private $list_arr = []; //队列最大值(满了不能入队) private $max_num = 10; //初始化队列,设置栈最大值 public function __construct($max_num=10) { $this->max_num = $max_num; } //入队 public function list_in($value){ if(empty($value)){ return '值不能为空'; } //是否满了 if(count($this->list_arr)>=$this->max_num){ return '队列已满,无法入队'; } array_push($this->list_arr,$value); $this->in_value = $value; return '入队成功,内容:'.$this->in_value; } //出队 public function list_out(){ if(empty($this->list_arr)){ return '出队失败,当前队列是空的'; } //出队操作,把队列第一个值去掉(由于队列内容总是) $this->out_value = $this->list_arr[$this->head_index]; unset($this->list_arr[$this->head_index]); //重排所有索引,保证队首索引永远指向下一个内容 $this->list_arr = array_values($this->list_arr); return '出队成功,内容:'.$this->out_value; } //获得当前队长度 public function getCount(){ return count($this->list_arr); } //最后出队值 public function getOutValue(){ return $this->out_value; } //队内信息 public function getListArr(){ return $this->list_arr; } } $object = new MyList(3); //尝试插入和弹出,指令合集 $test_order_arr = [2,'西瓜','菠萝','苹果','芒果','黑凤梨',2,2]; foreach($test_order_arr as $test_order){ switch ($test_order){ case 2: echo $object->list_out()."\n"; var_dump($object->getListArr()); break; default: echo $object->list_in($test_order)."\n"; var_dump($object->getListArr()); break; } } echo "最终内容\n"; var_dump($object->getListArr());
E:\linux_data>php MyList.php
出队失败,当前队列是空的
array(0) {
}
入队成功,内容:西瓜
array(1) {
[0]=>
string(6) "西瓜"
}
入队成功,内容:菠萝
array(2) {
[0]=>
string(6) "西瓜"
[1]=>
string(6) "菠萝"
}
入队成功,内容:苹果
array(3) {
[0]=>
string(6) "西瓜"
[1]=>
string(6) "菠萝"
[2]=>
string(6) "苹果"
}
队列已满,无法入队
array(3) {
[0]=>
string(6) "西瓜"
[1]=>
string(6) "菠萝"
[2]=>
string(6) "苹果"
}
队列已满,无法入队
array(3) {
[0]=>
string(6) "西瓜"
[1]=>
string(6) "菠萝"
[2]=>
string(6) "苹果"
}
出队成功,内容:西瓜
array(2) {
[0]=>
string(6) "菠萝"
[1]=>
string(6) "苹果"
}
出队成功,内容:菠萝
array(1) {
[0]=>
string(6) "苹果"
}
最终内容
array(1) {
[0]=>
string(6) "苹果"
}