画江湖之数据结构 [第二话:队列和栈] 队列
队列
1 队列简介
概括:
- 队列是一种特殊的线性表(链表),特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作(FIFO),和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。
- 队列中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的。
完整代码块:
<?php
class Node{
public $data;
public $next;
public function __construct($data,$next=null){
$this->data = $data;
$this->next = $next;
}
}
class Queue{
public $front = null;
public $rear = null;
public $size = 0;
public function __construct(){
}
public function push($data)
{
$n = new Node($data);
if($this->front == null && $this->rear == null){
$this->front = $n;
$this->rear = $n;
}else{
$this->rear->next = $n;
$this->rear = $n;
}
$this->size++;
}
public function shift()
{
if($this->front){
$this->size--;
$data = $this->front->data;
$this->front = $this->front->next;
return $data;
}else{
return null;
}
}
}
// $s = new Queue();
// $s->push("aaaa");
// $s->push("bb");
// $s->push("cc");
// $s->push("dd");
// $s->push("fifo");
// // echo $s->shift();
// while($data = $s->shift()){
// echo $data."<br>";
// }
//数组实现队列
// $arr = [];
// array_push($arr,"张三");
// array_push($arr,"李四");
// array_push($arr,"王五");
// array_push($arr,"王六");
// while($data = array_shift($arr)){
// echo $data."<br>";
// }
2 分析代码块 具体分析到代码注释哦 ~ 队列是先进先出的结构哦
先定义一个节点
class Node{
public $data;
public $next;
public function __construct($data,$next=null){
$this->data = $data;
$this->next = $next;
}
}
压入队列
public $front = null;//定义头部的变量
public $rear = null;//定义尾部的变量
public $size = 0;//定义队列的总长度
public function push($data)
{
$n = new Node($data);//先定义一个对象
if($this->front == null && $this->rear == null){ //如果头部和尾部都是为空的情况下
$this->front = $n;//就把想压进去的队列初始化为头部队列
$this->rear = $n;//就把想压进去的队列初始化为尾部队列
}else{
//记住:队列是在尾部插入 所以下面的操作是正常的。。
$this->rear->next = $n;//第一步:尾部的下一个就是当前想插入的数值
$this->rear = $n;//第二步:尾部变成当前想插入的值
}
$this->size++;//队列计数
}
// $s = new Queue();
// $s->push("aaaa");
// $s->push("bb");
// $s->push("cc");
// $s->push("dd");
出队列
public function shift()
{
if($this->front){ //如果有头部队列 说明有值了 才可以出队列哦
$this->size--;//减去队列的长度
$data = $this->front->data;//从头部出一个队列的数据
$this->front = $this->front->next;//把头部队列的数值 替换为他的下一个队列
return $data;//返回数据
}else{
return null;
}
}
while($data = $s->shift()){
echo $data;
}
3 利用php的自带的数组实现队列
代码段 和分析代码~
//数组实现队列
$arr = [];//定义一个数组队列
array_push($arr,"张三");//压入到队列尾部
array_push($arr,"李四");
array_push($arr,"王五");
array_push($arr,"王六");
while($data = array_shift($arr)){//从头部弹出一个队列数据
echo $data."<br>";
}
本作品采用《CC 协议》,转载必须注明作者和本文链接
谢谢分享,希望多多更新