Die Warteschlange ist eine spezielle lineare Tabelle, die nur Löschvorgänge am vorderen Ende der Tabelle, die als „vorne“ bezeichnet werden können, und Einfügungsvorgänge am hinteren Ende der Tabelle, die als „hinten“ bezeichnet werden können, zulässt. 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 die Einfügeoperation ausgeführt wird, wird als Ende der Warteschlange bezeichnet, und das Ende, an dem die Löschoperation ausgeführt wird, wird als Kopf der Warteschlange bezeichnet. Einfügungsoperationen sind nur am Ende der Warteschlange und zum Löschen 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:
Code:
<?php /** * php队列算法 * 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('0'=>'队尾');//存储队列 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 '入队成功!<br>'; } } //出队 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('马帅'); $q->InQ('溜冰'); $q->InQ('张世佳'); $q->OutQ(); $q->InQ("周瑞晓"); $q->OutQ(); $q->OutQ(); $q->OutQ(); $q->OutQ();
In diesem Fall gibt es zwei Klassen:
Die erste ist Die Datenklasse wird verwendet, um die Speicherung von Daten und das Ein- und Ausreihen von Warteschlangenelementen zu realisieren.
Die zweite Klasse ist die Warteschlangenklasse, die für einige Ein- und Ausreihungsvorgä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 in die Warteschlange gestellten Warteschlangenelemente speichert)
Szenenbeschreibung :
1. Generieren Sie beim Initialisieren der Warteschlange eine Warteschlange, übergeben Sie einen Parameter als maxsize, initialisieren Sie die Warteschlange, setzen Sie 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 vonDetaillierte Schritte zur Implementierung der PHP-Warteschlange (leicht verständlich). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!