Heim  >  Artikel  >  Backend-Entwicklung  >  PHP-Standardbibliothek spl verknüpfte Liste, Stapel, Warteschlange

PHP-Standardbibliothek spl verknüpfte Liste, Stapel, Warteschlange

WBOY
WBOYOriginal
2016-08-08 09:18:591365Durchsuche

Doppelt verknüpfte Listenklasse: SplDoublyLinkedList

1. Methoden zum Hinzufügen und Löschen von Knoten

Push: Fügen Sie einen Knoten am Ende von ein die verlinkte Liste
pop: Holen Sie sich den Endknoten in der verknüpften Liste und löschen Sie diesen Knoten aus der verknüpften Liste. Die Operation ändert nicht die Position des aktuellen Zeigers
unshift: Füge einen Knoten am Kopf der verknüpften Liste ein
Verschiebung: Löschen Sie einen Kopfknoten einer verknüpften Liste

2. Zeigeroperationsmethode

Zurückspulen: Lassen Sie den aktuellen Zeiger der verknüpften Liste auf den Kopf der verknüpften Liste zeigen (d. h. unten)
current: Rufen Sie das Element ab, auf das der aktuelle Knotenzeiger der verknüpften Liste zeigt. Vor dem Aufruf muss Rewind aufgerufen werden. Wenn der Knoten, auf den verwiesen wird, gelöscht wird, zeigt er auf einen leeren Knoten
next: Lassen Sie den aktuellen Zeiger der verknüpften Liste auf den nächsten Knoten zeigen, und der Rückgabewert von current ändert sich entsprechend
unten: Holen Sie sich das Kopfelement der verknüpften Liste, die aktuelle Zeigerposition bleibt unverändert
top: Holen Sie sich das Endelement der verknüpften Liste, die aktuelle Zeigerposition bleibt unverändert

3 Andere Methoden (Verwendung siehe Stack-Klasse)

gültig: Überprüfen Sie, ob noch Knoten in der Verknüpfte Liste, Sie können sie beim Schleifen der Ausgabe verwenden. Treffen Sie ein Urteil
count: zählt die Anzahl der Knoten in der verknüpften Liste
Schlüssel: Gibt den Schlüsselwert des aktuellen Knotens
zurück offsetSet: Legen Sie den Wert des angegebenen Schlüssels fest. Hinweis: Wenn der Schlüssel 0 ist, zeigt 0 auf den Kopf oder das Ende in der verknüpften Liste und auf den oberen Rand des Stapels.
offunset: Registrierung des Werts des angegebenen Schlüssels aufheben

<code><span><?</span>php
<span>/**
 * Created by 马廷广
 * User: 马廷广
 * Date: 2015/8/5
 * Time: 10:52
 */</span><span>$obj</span><span>=</span><span>new</span> SplDoublyLinkedList();
<span>$obj</span><span>-></span>push(<span>'b'</span>);
<span>$obj</span><span>-></span>push(<span>'c'</span>);
<span>$obj</span><span>-></span>unshift(<span>'a'</span>);
var_dump(<span>$obj</span>);
<span>/*   array(3) {
    [0]=>
    string(1) "a"
    [1]=>
    string(1) "b"
    [2]=>
    string(1) "c"
  }
)
*/</span><span>$obj</span><span>-></span>rewind();
var_dump(<span>$obj</span><span>-></span>current());<span>//string(1) "a"</span><span>$obj</span><span>-></span>next();
var_dump(<span>$obj</span><span>-></span>current());<span>//string(1) "a"</span>
var_dump(<span>$obj</span><span>-></span>bottom());<span>//string(1) "a"</span>
var_dump(<span>$obj</span><span>-></span>top());<span>//string(1) "c"</span>
var_dump(<span>$obj</span><span>-></span>pop());<span>//string(1) "c"</span>
var_dump(<span>$obj</span>);
<span>/*
*  array(2) {
    [0]=>
    string(1) "a"
    [1]=>
    string(1) "b"
  }
*/</span>
var_dump(<span>$obj</span><span>-></span>shift());<span>//string(1) "a"</span>
var_dump(<span>$obj</span>);
<span>/*
* array(1) {
    [0]=>
    string(1) "b"
  }
*/</span></code>

Stack-Klasse: SplStack-Klasse, geerbt von der SplDoublyLinkedList-Klasse

Prinzip: Die unterste Ebene der Stack-Klasse wird vom Stack implementiert, und Der Stapel ist eine erweiterte Nachverarbeitung. Daher weisen einige von der SplDoublyLinkedList-Klasse geerbte Methoden der SplStack-Klasse einige Unterschiede im Verständnis auf, z. B. die Rewind-Methode. Nachdem Spl die Rewind-Methode verwendet hat, zeigt der Zeiger auf den oberen Rand des Stapels in der Abbildung. Push- und Pop-Operationen auf die oberen Elemente des Stapels, Unshift- und Shift-Operationen auf das untere Element des Stapels

<code><span><?</span>php
<span>/**
 * Created by 马廷广
 * User: 马廷广
 * Date: 2015/8/5
 * Time: 11:47
 */</span><span>$stack</span><span>=</span><span>new</span> SplStack();
<span>$stack</span><span>-></span>push(<span>'a'</span>);
<span>$stack</span><span>-></span>push(<span>'b'</span>);
<span>$stack</span><span>-></span>push(<span>'c'</span>);
echo <span>$stack</span><span>-></span>count();<span>//3</span><span>$stack</span><span>-></span>rewind();
echo <span>$stack</span><span>-></span>current();<span>//c</span><span>$stack</span><span>-></span>offsetSet(<span>0</span>,<span>'d'</span>);<span>//offsetSet中0指向的是图中的栈顶,由栈顶向下递增1,2,3,4</span><span>while</span>(<span>$stack</span><span>-></span>valid()){
    echo <span>$stack</span><span>-></span>key()<span>.</span><span>"->"</span><span>.</span><span>$stack</span><span>-></span>current();
    <span>$stack</span><span>-></span>next();
}
<span>/*2->d
1->b
0->a
*/</span></code>

Warteschlangenklasse: SplQueue-Klasse, geerbt von der SplDoublyLinkedList-Klasse

enqueue: Betreten Sie die Warteschlange
dequeue: Verlassen Sie die Warteschlange
Die Methoden rewind, offsetSet und andere der Queue-Klasse ähneln der verknüpften Liste

<code><?php
/**
 * Created <span>by</span> 马廷广
 * <span>User</span>: 马廷广
 * <span>Date</span>: <span>2015</span>/<span>8</span>/<span>5</span>
 * <span>Time</span>: <span>12</span>:<span>36</span>
 */

$obj = <span>new</span> SplQueue();
$obj->enqueue(<span>'a'</span>);
$obj->enqueue(<span>'b'</span>);
$obj->enqueue(<span>'c'</span>);
var_dump($obj);
/*    [<span>0</span>]<span>=></span>
    string(<span>1</span>) <span>"a"</span>
    [<span>1</span>]<span>=></span>
    string(<span>1</span>) <span>"b"</span>
    [<span>2</span>]<span>=></span>
    string(<span>1</span>) <span>"c"</span>
  }
*/
$obj->unshift(<span>"d"</span>);
$obj->push(<span>'e'</span>);
var_dump($obj);
/*
*  array(<span>5</span>) {
    [<span>0</span>]<span>=></span>
    string(<span>1</span>) <span>"d"</span>
    [<span>1</span>]<span>=></span>
    string(<span>1</span>) <span>"a"</span>
    [<span>2</span>]<span>=></span>
    string(<span>1</span>) <span>"b"</span>
    [<span>3</span>]<span>=></span>
    string(<span>1</span>) <span>"c"</span>
    [<span>4</span>]<span>=></span>
    string(<span>1</span>) <span>"e"</span>
  }
*/
$obj->rewind();
echo $obj->current();<span>//</span>d
$obj->offsetSet(<span>0</span>,<span>'h'</span>);
var_dump($obj);
/*
* array(<span>5</span>) {
    [<span>0</span>]<span>=></span>
    string(<span>1</span>) <span>"h"</span>
    [<span>1</span>]<span>=></span>
    string(<span>1</span>) <span>"a"</span>
    [<span>2</span>]<span>=></span>
    string(<span>1</span>) <span>"b"</span>
    [<span>3</span>]<span>=></span>
    string(<span>1</span>) <span>"c"</span>
    [<span>4</span>]<span>=></span>
    string(<span>1</span>) <span>"e"</span>
  }
*/</code>

Copyright-Erklärung: Dieser Artikel ist ein Originalartikel des Bloggers und darf nicht ohne reproduziert werden die Erlaubnis des Bloggers.

Das Obige stellt die verknüpften Listen, Stapel und Warteschlangen der PHP-Standardbibliothek spl vor, einschließlich des Inhalts. Ich hoffe, dass es für Freunde hilfreich ist, die sich für PHP-Tutorials interessieren.

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