队列(queue): 满足先进先出(fifo)的规则;
下面使用php实现一个简单的循环队列模型;
初始状态的队列,队列长度为0,队头和队尾的指针相同均位于队列的开始;
入队操作:队尾指针向后移动,长度加一;
出队操作:队头指针向后移动,长度减一;
立即学习“PHP免费学习笔记(深入)”;
可以实现用户的在线注册、登陆后可以添加图书、购买图书,可以对图书类别、出版社、价格等进行饼图分析默认帐号/密码:51aspx/51aspx该系统采用三层接口开发,App_Code下为三层结构的代码文件,适合三层入门者学习使用数据绑定控件使用的是GridView,顶部公用文件采用了UserControl用户控件调用DB_51aspx下为Sql数据库文件,附件即可【该源码由51aspx提供】
循环队列特点:队列大小固定,队列所开辟的内存空间可循环使用,指针的移动是靠与queueSize取余运算移动;
下面的例子是利用数组实现队列存储,数组下标作为指针;
_queue = [];
$this->_queueSize = $size;
$this->_front = 0;
$this->_rear = 0;
$this->_queueLength = 0;
}
/**
* 销毁队列;
*/
public function __destruct()
{
unset($this->_queue);
}
/**
* @method 入队
* @param mixed $elem 入队的元素
* @return bool
*/
public function enQueue($elem)
{
if (!$this->isFull()) {
$this->_queue[$this->_rear] = $elem;
$this->_rear++;
$this->_rear = $this->_rear % $this->_queueCapacity;
$this->_queueLength++;
return true;
}
return false;
}
/**
* @method 出队
* @return mixed|null
*/
public function deQueue()
{
if (!$this->isEmpty()) {
$elem = $this->_queue[$this->_front];
//unset($this->_queue[$this->_front]);
$this->_front++;
$this->_front %= $this->_queueCapacity;
$this->_queueLength--;
return $elem;
}
return null;
}
/**
* @method 判断队列是否为空;
* @return bool
*/
public function isEmpty()
{
return $this->_queueLength === 0;
}
/**
* @method 判断队列是否饱和;
* @return bool
*/
public function isFull()
{
return $this->_queueLength === $this->_queueCapacity;
}
/**
* @method 遍历队列并输出(测试队列)
*/
public function outputQueue()
{
for ($i = $this->_front; $i < $this->_queueLength + $this->_front; $i++) {
echo $this->_queue[$i % $this->_queueCapacity].PHP_EOL;
}
}
/**
* @method 清空队列
*/
public function clearQueue()
{
$this->_queue = [];
$this->_front = 0;
$this->_rear = 0;
$this->_queueLength = 0;
}
}测试队列类,讲道理是没什么大问题的,优化就靠真实的业务场景了;
$a = new Queue(3); echo 'enQueue1 $a->enQueue(1)'.PHP_EOL; $a->enQueue(1); echo 'enQueue2 $a->enQueue(2)'.PHP_EOL; $a->enQueue(2); echo 'enQueue3 $a->enQueue(3)'.PHP_EOL; $a->enQueue(3); echo 'enQueue4 $a->enQueue(4)'.PHP_EOL; $a->enQueue(4); //讲道理是失败的; $a->outputQueue(); //输出 1 2 3 echo PHP_EOL; echo PHP_EOL; echo $a->deQueue(); //输出 1 队列 2 3 echo PHP_EOL; echo PHP_EOL; echo $a->deQueue(); //输出 2 队列 3 $a->enQueue(5); //队列 3 5 echo PHP_EOL; echo PHP_EOL; $a->outputQueue(); //输出 3 5 $a->clearQueue(); //队列空;
如有不对,敬请指教










