浅谈PHP数据结构之队列

队列

队列是一种特殊的线性表,特殊之处在于它仅仅同意在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。

队列的数据元素又称为队列元素。在队列中插入一个队列元素称为入队。从队列中删除一个队列元素成为出队。由于队列仅仅同意在一段插入。在还有一端删除,所以仅仅有最早进入队列的元素才干最先从队列中删除,故队列又称为先进先出(FIFO—first in first out)线性表


在PHP中,队列经经常使用来做消息队列和任务队列等,是一个很实用的机构。小弟初学。这里简单的介绍下队列的基本结构和操作。


1.顺寻队列

PHP中的顺序队列很easy,简单的几行就行实现。

<?

php

class Queue{

private $Que=array();

//入队

public function Enqueue($data){

return array_push($this->Que,$data);

}

//出队

public function DelQue(){

return array_shift($this->Que);

}

}

>

这样就简单的实现了PHP版本号的顺序队列。


2.链式队列

链式队列属于经常使用队列,这里我简单的写了一下链式队列的构造方法和基本操作:

<?php
//定义链式队列的成员
class Qnode{
public $data;//成员数据
public $next;//指向下一成员
public $id;//成员id
    public function __construct($data=NULL,$next=NULL,$id=0){
        $this->data=$data;
        $this->next=$next;
        $this->id=$id;
}
}
//定义队列
class LinkQueue{
    private $front;//队头
    private $rear;//队尾
    public function __construct(){
        $this->front=new Qnode($data=NULL,$next=NULL,$id=0);
        $this->rear=$this->front;
    }
    //定义入队
    public function EnQueue($data){
        $front=$this->front;
        $q = new Qnode($data,NULL,$this->rear->id+1);
        $this->rear->next=$q;
        $this->rear=$q;
    }
    //出队
    public function DelQueue(){
        $temp=$this->front->next->data;
        $this->front=$this->front->next;
        $this->front->data=NULL;
        return $temp;
    }
    //获取队列长度
    public function GetLength(){
        return ($this->rear->id-$this->front->id);
    }
    //获取队列
    public function GetLinkQueue(){
        $front=$this->front;
        while($front != $this->rear){
            $front=$front->next;
            echo '第'.$front->id.'个成员为'.$front->data.'<br>';
        }
    }
}

$a =new LinkQueue;
$a->Enqueue('a');
$a->Enqueue('b');
$a->Enqueue('c');
$a->Enqueue('d');
$a->Enqueue(3);
echo '出队曾经总共同拥有'.$a->GetLength().'个队员<br>';
echo $a->DelQueue().'运行出队以后<br>';
echo $a->GetLinkQueue();
echo '一共剩余'.$a->GetLength().'个队员';
?>

最后几行为測试代码。下面是结果:

希望能够帮助大家理解链表结构,小弟初学,要是有地方写的不够透彻,希望大家多多包括。

转载于:https://www.cnblogs.com/ljbguanli/p/6984278.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值