Maison  >  Article  >  développement back-end  >  Comment implémenter l'algorithme de file d'attente PHP ?

Comment implémenter l'algorithme de file d'attente PHP ?

不言
不言original
2018-07-20 17:58:101506parcourir

Quelle est la méthode pour implémenter la file d'attente en PHP ? Une file d'attente est une table linéaire qui fonctionne selon le principe du premier entré, premier sorti. Jetons un coup d'œil à l'implémentation d'un algorithme de file d'attente PHP présentée dans cet article.

Il y a deux classes dans cet algorithme de file d'attente. L'une est la classe de données, qui stocke les données ; la seconde est la file d'attente, qui est la classe de file d'attente. Il s'agit de certaines opérations de la file d'attente.

Tout d'abord, la file d'attente contient avant (la tête de la file d'attente, c'est-à-dire la personne qui veut sortir de la file d'attente) arrière (la queue de la file d'attente pointe toujours vers 0 ici) file d'attente ( stockage de tous les objets de données entrés dans la file d'attente, la valeur par défaut dans la file d'attente Lorsqu'il y a un élément, l'avant et l'arrière pointent vers lui) maxsize (la longueur de la file d'attente) quatre attributs

Instructions d'application :

2. Rejoignez la file d'attente : Déterminez si la file d'attente est pleine (front-rear==maxsize), Si l'invite est pleine, si elle n'est pas pleine, laissez d'abord le devant + 1, puis déplacez tous les les éléments de la file d'attente une position en avant (c'est-à-dire abandonner la position de queue de la file d'attente pour le nouvel arrivant), puis générer un objet de données et l'insérer à l'emplacement tail + 1. J'ai rejoint l'équipe avec succès en ce moment !

3. Supprimer la file d'attente : Déterminez si la file d'attente est vide (front==rear). Si elle est vide, elle vous demandera si elle n'est pas vide, supprimez l'objet pointé par front, front-1 (. reculez d’une position) et sortez. Succès d’équipe !

<?php
/**
*  php队列算法
*  
*  Create On 2010-6-4
*  Author Been
*  QQ:281443751
*  Email:binbin1129@126.com
**/class data {    //数据
    private $data;    
    public function __construct($data){        
    $this->data=$data;        
    echo $data.":哥进队了!<br>";
    }    
    public function getData(){        
    return $this->data;
    }    public function __destruct(){        
    echo $this->data.":哥走了!<br>";
    }
}class queue{    protected $front;//队头
    protected $rear;//队尾
    protected $queue=array(&#39;0&#39;=>&#39;队尾&#39;);//存储队列
    protected $maxsize;//最大数
    
    public function __construct($size){        
    $this->initQ($size);
    }    //初始化队列
    private function initQ($size){        
    $this->front=0;        
    $this->rear=0;        
    $this->maxsize=$size;
    }    //判断队空
    public function QIsEmpty(){        
    return $this->front==$this->rear;
    }    //判断队满
    public function QIsFull(){        
    return ($this->front-$this->rear)==$this->maxsize;
    }    //获取队首数据
    public function getFrontDate(){        
    return $this->queue[$this->front]->getData();
    }    //入队
    public function InQ($data){        
    if($this->QIsFull())echo $data.":我一来咋就满了!(队满不能入队,请等待!)<br>";        
    else {            
    $this->front++;            
    for($i=$this->front;$i>$this->rear;$i--){                
    //echo $data;
                if($this->queue[$i])unset($this->queue[$i]);                
                $this->queue[$i]=$this->queue[$i-1];
            }            
            $this->queue[$this->rear+1]=new data($data);            
            //print_r($this->queue);
            //echo $this->front;
            echo &#39;入队成功!<br>&#39;;
        }
    }    //出队
    public function OutQ(){        
    if($this->QIsEmpty())echo "队空不能出队!<br>";        
    else{            
    unset($this->queue[$this->front]);            
    $this->front--;            
    //print_r($this->queue);
            //echo $this->front;
            echo "出队成功!<br>";
        }
    }
}$q=new queue(3);
$q->InQ("A");
$q->InQ(&#39;B&#39;);
$q->InQ(&#39;游泳&#39;);
$q->InQ(&#39;C&#39;);
$q->OutQ();
$q->InQ("D");
$q->OutQ();
$q->OutQ();
$q->OutQ();
$q->OutQ();
Recommandations associées :

PHP implémente une file d'attente bidirectionnelle

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn