队列,直接用php array 的函数也能行,可以利用 一下几个function:
reset 函数将内部指针指向数组中的第一个元素,并返回
array_shift — 将数组开头的单元移出数组
array_unshift — 在数组开头插入一个或多个单元
array_push — 将一个或多个单元压入数组的末尾(入栈)
current — 返回数组中的当前单元
each — 返回数组中当前的键/值对并将数组指针向前移动一步
end — 将数组的内部指针指向最后一个单元
pos — current 的别名
prev — 将数组的内部指针倒回一位
$a=array();
#入队列
array_push($a, 1);
array_push($a, 2);
array_push($a, 3);
#将数组内指针指向第一个,并输出
print_r(reset($a));
print_r($a);
#获取并移除队列首部一个单元
print_r(array_shift($a));
print_r($a);
链表实现:
<?php
class Node{
public $item;
public $next;
}
class Queue{
private $first;
private $last;
private $n;
function isEmpty(){
return $this->first==null;
}
function size(){
return $this->n;
}
function peek(){
if($this->isEmpty())
throw new Exception('no such elemane');
return $this->first->item;
}
function enqueue($item){
$oldlast=$this->last;
$this->last=new Node();
$this->last->item=$item;
if($this->isEmpty())
$this->first=$this->last;
else
$oldlast->next=$this->last;
$this->n++;
}
function dequeue(){
if($this->isEmpty())
throw new Exception('not such elemane');
$item=$this->first->item;
$this->first=$this->first->next;
$this->n--;
if($this->isEmpty())
$this->last=null;
return $item;
}
}
#测试
try {
$queue=new Queue;
print_r($queue);
$queue->enqueue(1);
$queue->enqueue(2);
$queue->enqueue(3);
print_r($queue->peek());
print_r($queue);
print_r($queue->dequeue());
print_r($queue);
} catch (Exception $e) {
echo $e->getMessage();
}