Codebeispiel für die Implementierung einer PHP-Warteschlange

不言
Freigeben: 2023-04-04 12:50:01
nach vorne
2413 Leute haben es durchsucht

Dieser Artikel enthält Codebeispiele zur PHP-Warteschlangenimplementierung. Freunde in Not können darauf verweisen.

Die Warteschlange ist eine spezielle lineare Tabelle, die nur Löschvorgänge am vorderen Ende der Tabelle, die als vorderes Ende bezeichnet werden können, und Einfügevorgänge am hinteren Ende der Tabelle zulässt genannt hinten. Die Warteschlange ist wie der Stapel eine lineare Liste mit eingeschränkten Operationen. Der Unterschied zum Stapel besteht darin, dass die Warteschlange dem Prinzip „First in, first out“ folgt, während der Stack dem Prinzip „First in, last out“ 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 Ausschließen 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();
Nach dem Login kopieren

In diesem Fall gibt es zwei Klassen:

Die erste ist die Datenklasse, die zum Implementieren von Daten verwendet wird Speicherung und Ein- und Ausstieg von Warteschlangenelementen;

Die zweite ist die Warteschlangenklasse, die für einige Ein- und Ausstiegsvorgä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)

Warteschlange (ein Objekt, das alle Warteschlangenelemente speichert, die in die Warteschlange gestellt wurden)

Szenariobeschreibung:

1. Generieren Sie beim Initialisieren der Warteschlange eine Warteschlange und übergeben Sie sie. Geben Sie einen Parameter als maxsize ein, um die Warteschlange zu initialisieren, setzen Sie die Rückseite der Warteschlange auf 0 und die Vorderseite der Warteschlange auf 0. Zu diesem Zeitpunkt gibt es nur Element 0 in der Warteschlange 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:

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

Das obige ist der detaillierte Inhalt vonCodebeispiel für die Implementierung einer PHP-Warteschlange. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:segmentfault.com
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage