Heim  >  Artikel  >  Backend-Entwicklung  >  Verfügt PHP über ein Warteschlangenkonzept?

Verfügt PHP über ein Warteschlangenkonzept?

(*-*)浩
(*-*)浩Original
2019-10-17 11:37:232795Durchsuche

Verfügt PHP über ein Warteschlangenkonzept?

Die Warteschlange ist eine spezielle lineare Tabelle, die nur Löschvorgänge am vorderen Ende der Tabelle zulässt, die am hinteren Ende der Tabelle aufgerufen werden können , können Sie es hinten aufrufen, um den Einfügevorgang auszuführen. (Empfohlenes Lernen: PHP-Video-Tutorial)

Die Warteschlange ist wie der Stapel eine lineare Tabelle mit eingeschränkten Operationen. Der Unterschied zum Stapel besteht darin, dass die Warteschlange dem „ folgt. fortgeschrittenes „First Out“-Prinzip, während der Stack dem „First In, Last Out“-Prinzip folgt. Das Ende der Warteschlange, an dem der Einfügevorgang ausgeführt wird, wird als Ende der Warteschlange bezeichnet, und das Ende, an dem der Löschvorgang ausgeführt wird, wird als Kopf der Warteschlange bezeichnet. Am Ende der Warteschlange sind nur Einfügevorgänge und Löschvorgänge zulässig Operationen sind an der Spitze der Warteschlange zulässig.

Die Datenelemente der Warteschlange werden auch als Warteschlangenelemente bezeichnet. Das Einfügen eines Elements am Ende der Warteschlange wird als „Einreihen“ bezeichnet, und das Löschen eines Elements am Anfang der Warteschlange wird als „Entfernen“ bezeichnet. Spezifischer Implementierungsreferenzcode:

<?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("小苗");
$q->InQ(&#39;马帅&#39;);
$q->InQ(&#39;溜冰&#39;);
$q->InQ(&#39;张世佳&#39;);
$q->OutQ();
$q->InQ("周瑞晓");
$q->OutQ();
$q->OutQ();
$q->OutQ();
$q->OutQ();

In diesem Fall gibt es zwei Klassen:

Die erste ist die Datenklasse, die zum Speichern von Daten und zum Eingeben von Warteschlangenelementen verwendet wird. Warteschlangen- und Entnahmesituationen;

Die zweite ist die Warteschlangenklasse, die für einige Einreihungs- und Entnahmevorgänge von Warteschlangenelementen verwendet wird.

Die Warteschlange enthält vier Attribute:

vorne (der Kopf der Warteschlange)

hinten (das Ende der Warteschlange)

maxsize (die Länge der Warteschlange, also die Anzahl der Warteschlangenelemente)

queue (ein Objekt, das alle in die Warteschlange gestellten Warteschlangenelemente speichert)

1 Warteschlange, generieren Sie eine Warteschlange und übergeben Sie einen Parameter. Setzen Sie als Maxsize-Initialisierungswarteschlange den hinteren Teil der Warteschlange auf 0 und den vorderen Teil der Warteschlange auf 0. Zu diesem Zeitpunkt befindet sich nur Element 0 in der Warteschlange und sowohl hinten als auch vorne zeigen darauf.

2. Beim Beitritt zur Warteschlange müssen Sie zunächst feststellen, ob die Warteschlange voll ist (vorne-hinten == maxsize). Wenn sie nicht voll ist, ist das Einfügen möglich erlaubt. Beim Einfügen wird vorne inkrementiert, und dann werden alle Elemente der Warteschlange um eine Position nach vorne verschoben (wobei die Endposition der Warteschlange verbleibt, um neue Elemente einzufügen), und dann wird ein neues Datenobjekt generiert und an der Endposition der Warteschlange eingefügt Warteschlange.

3. Stellen Sie beim Entnehmen fest, ob die Warteschlange leer ist (vorne == hinten). Wenn es nicht leer ist, löschen Sie das Objekt, auf das front zeigt, und dekrementieren Sie front, um das Entfernen aus der Warteschlange abzuschließen.

Die Laufergebnisse sind wie folgt:

小苗:哥进队了!
入队成功
马帅:哥进队了!
入队成功
溜冰:哥进队了!
入队成功
张世佳:我一来咋就满了!(队满不能入队,请等待!)
小苗:哥走了!
出队成功!
周瑞晓:哥进队了!
入队成功
马帅:哥走了!
出队成功!
溜冰:哥走了!
出队成功!
周瑞晓:哥走了!
出队成功!
队空不能出队!
队空不能出队!

Das obige ist der detaillierte Inhalt vonVerfügt PHP über ein Warteschlangenkonzept?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn