Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Einführung in die Data Structures-Erweiterung in PHP

Detaillierte Einführung in die Data Structures-Erweiterung in PHP

醉折花枝作酒筹
醉折花枝作酒筹nach vorne
2021-07-27 16:54:171756Durchsuche

Da Arrays in PHP zu leistungsstark sind, sind diese Datenstrukturen enthalten. Daher besteht keine Notwendigkeit, auf diese Datenstrukturen zu achten, und diese Konzepte werden mit der Zeit verblassen. In PHP gibt es eine Erweiterung namens Data Structures, die diese allgemeinen Datenstrukturen enthält. Lassen Sie es uns heute vorstellen.

Detaillierte Einführung in die Data Structures-Erweiterung in PHP

Da Arrays zu leistungsfähig sind, sind diese Datenstrukturen enthalten, sodass diese Datenstrukturen im Laufe der Zeit nicht mehr berücksichtigt werden müssen Datenstrukturen in PHP.

Es gibt eine Erweiterung „Data Structures“ in PHP, die diese gängigen Datenstrukturen enthält.

PHP-Datenstruktur

  • Priority QueuePriorityQueue

  • Double-Ended Queue Deque

  • Queue FIFO (First In First Out)

  • Stack LIFO (First In Last Out)

  • Hash-Tabelle Hash

  • Set Collection
  • Map Dictionary

Einführung in die Datenstruktur

Priority QueuePriorityQueue

PriorityQueue ist Queue sehr ähnlich. Werte werden mit der angegebenen Priorität in die Warteschlange verschoben, und der Wert mit der höchsten Priorität steht immer an der Spitze der Warteschlange.

Hinweis

  • Bei Werten mit gleicher Priorität bleibt die Reihenfolge „First in, first out“ erhalten.

  • Das Durchlaufen einer PriorityQueue ist destruktiv und entspricht kontinuierlichen Pop-Operationen, bis die Warteschlange leer ist.

Kapazität festlegen

Die Standardkapazität beträgt 8, Sie können die Kapazität manuell festlegen. Diese Kapazität bezieht sich nicht auf die Länge der Warteschlange, sondern auf den Speicherplatz. Stellen Sie sicher, dass bei der Neuzuweisung der Kapazität genügend Speicher vorhanden ist.

Wenn der Wert kleiner oder gleich der aktuellen Kapazität ist, bleibt die Kapazität unverändert.

$queue = new Ds\PriorityQueue(); 
$queue->allocate(8);

Kapazität abrufen

Wenn die Kapazität derzeit manuell eingestellt wird und die eingestellte Kapazität größer als die tatsächlich belegte Kapazität ist, wird die eingestellte Kapazität zurückgegeben. Andernfalls wird die tatsächliche Kapazität zurückgegeben.

$queue = new Ds\PriorityQueue(); 
// 此时返回默认值 8
$queue->capacity();

Priorität festlegen

Je größer der Wert, desto höher die Priorität

$queue = new Ds\PriorityQueue(); 
$queue->push('value1', 1);
$queue->push('value2', 2);

Beispiel

$queue = new Ds\PriorityQueue(); 
$queue->push('沙僧', 2);
$queue->push('唐僧', 5);
$queue->push('白龙马', 1);
$queue->push('猪八戒', 3);
$queue->push('孙悟空', 4);
$cout = $queue->count();
for($i=0; $i<$cout; $i++) {
  echo $queue->pop();
  echo PHP_EOL;
}

Ausgabe

唐僧
孙悟空
猪八戒
沙僧
白龙马

Anwendungsszenario

  • MySQL Um die Abfrage zu beschleunigen und eine Sortierung zu vermeiden, kann der Index nicht verwendet werden und es wird keine Sortierung durchgeführt. Führen Sie eine manuelle Sortierung auf Servercodeebene durch und kehren Sie dann zurück.

  • Andere Anwendungsszenarien...

Double-Ended Queue Deque

hat zwei Zeiger, die jeweils auf den Kopf und den Schwanz zeigen. Das Einführen und Auswerfen kann jeweils am Kopf und am Schwanz erfolgen.

Vorteile

  • Unterstützt Array-Syntax (eckige Klammern).

  • Beanspruchen Sie bei gleicher Anzahl an Werten weniger Speicher als ein Array.

  • Zugewiesenen Speicher automatisch freigeben, wenn seine Größe niedrig genug ist.

  • get(), set(), push(), pop(), shift() und unshift() sind alle O(1).

Nachteile

  • Der eingestellte Kapazitätswert muss eine Zweierpotenz sein und der Standardwert ist 8. Beispielsweise sind 2^2

  • insert() und remove() O(n). Beschreibung der Klassenmethode

  • Die Warteschlange ist „ „First In, First Out“ oder „FIFO“-Sammlung, die nur den Zugriff auf den Wert am Anfang der Warteschlange ermöglicht.

Beispiel

$deque = new Ds\Deque();
$deque->push(...['唐僧', '孙悟空', '猪八戒', '沙僧', '白龙马']);
$clone = $deque->copy();
$count = $deque->count();
echo '头:'.$deque->first().PHP_EOL;
echo '尾:'.$deque->last().PHP_EOL;
echo '--- 从队尾开始 ----'.PHP_EOL;
for($i=0; $i<$count; $i++) {
    echo $deque->pop();
    echo PHP_EOL;
}

echo '--- 从队头开始 ----'.PHP_EOL;
for($i=0; $i<$count; $i++) {
    echo $clone->shift();
    echo PHP_EOL;
}

Ausgabe

头:唐僧
尾:白龙马
--- 从队尾开始 ----
白龙马
沙僧
猪八戒
孙悟空
唐僧
--- 从队头开始 ----
唐僧
孙悟空
猪八戒
沙僧
白龙马

Stack LIFO (First In, Last Out)

Stack ist eine „Last In, First Out“- oder „LIFO“-Sammlung, die nur den Zugriff auf die Werte oben im erlaubt Struktur.

Beispiel

$queue = new Ds\Queue(); 
$queue->push('唐僧');
$queue->push(...['孙悟空', '猪八戒']);
$queue->push(['沙僧', '白龙马']);
print_r($queue);
    Ausgabe
  • Ds\Queue Object
    (
        [0] => 唐僧
        [1] => 孙悟空
        [2] => 猪八戒
        [3] => Array
            (
                [0] => 沙僧
                [1] => 白龙马
            )
    )
  • Map Dictionary

Map ist eine sequentielle Sammlung von Schlüssel-Wert-Paaren [key=>value], ähnlich einem Array. Schlüssel können beliebiger Art sein, müssen jedoch eindeutig sein. Wenn der Karte Werte mit demselben Schlüssel hinzugefügt werden, ersetzt die spätere Hinzufügung den vorherigen Wert.

Vorteile

Schlüssel und Werte können von jedem Typ sein, einschließlich Objekten

Unterstützt Array-Syntax.

Einfügungsreihenfolge beibehalten.

Leistung und Speichereffizienz ähneln Daten.

    Zugewiesenen Speicher automatisch freigeben, wenn die Größe niedrig genug ist.
  • Nachteile
  • Wenn Objekte als Schlüssel verwendet werden, können sie nicht in Arrays konvertiert werden.
  • Set Set

  • Set ist eine Reihe eindeutiger Werte. Es gibt nur einen Schlüsselsatz, der keine Werte speichert, und die Schlüssel können nicht wiederholt werden.
  • Vorteile

  • Werte können beliebiger Art sein, auch Objekte.

Unterstützt Array-Syntax.

  • Einfügungsreihenfolge beibehalten.

Zugewiesenen Speicher automatisch freigeben, wenn die Größe niedrig genug ist.

    Die Komplexität von add(), Remove() und Includes() ist alle O(1).
  • Nachteile
  • Unterstützt push(), pop(), insert(), shift() oder unshift() nicht
  • Wenn sich vor dem Zugriff auf den Index ein gelöschter Wert im Puffer befindet, Dann ist get() O(n), andernfalls ist es O(1).
  • Der Unterschied zwischen Karte und Set
  • Die Speichermethoden sind unterschiedlich. Map speichert in Form von [key => value] und Set speichert in Form von [...keys]

    Sowohl Map als auch Set stellen die Ordnung durch den Schlüssel sicher, sodass der Schlüssel nicht geändert werden darf.

Empfohlenes Lernen: php-Video-Tutorial

Das obige ist der detaillierte Inhalt vonDetaillierte Einführung in die Data Structures-Erweiterung in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:segmentfault.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen