Heim >Backend-Entwicklung >PHP-Tutorial >Detaillierte Erläuterung der Datenstruktur-DS-Erweiterung in PHP

Detaillierte Erläuterung der Datenstruktur-DS-Erweiterung in PHP

墨辰丷
墨辰丷Original
2018-05-19 13:37:531777Durchsuche

Der folgende Editor bringt Ihnen einen Artikel über die Datenstruktur-DS-Erweiterung in PHP. Der Herausgeber findet es ziemlich gut, deshalb werde ich es jetzt mit Ihnen teilen und es allen als Referenz geben. Folgen wir dem Editor, um einen Blick darauf zu werfen.

Nur PHP 7 oder höher kann diese Datenstrukturerweiterung installieren und verwenden:

1. Führen Sie den Befehl pecl install ds aus

2. Fügen Sie extension=ds.so in php.ini hinzu

3. Starten Sie PHP neu oder laden Sie die Konfiguration neu

Sammlungsschnittstelle:Enthält eine grundlegende Schnittstelle mit gemeinsamen Funktionen für alle Datenstrukturen in dieser Bibliothek. Es garantiert, dass alle Strukturen durchquerbar und zählbar sind und mit json_encode() in JSON konvertiert werden können.

Ds\Collection implements Traversable , Countable , JsonSerializable {
/* 方法 */
abstract public void clear ( void )
abstract public Ds\Collection copy ( void )
abstract public bool isEmpty ( void )
abstract public array toArray ( void )
}

Hashable-Schnittstelle: Ermöglicht das Sein von Objekten als Schlüssel verwendet.

Ds\Hashable {
/* 方法 */
abstract public bool equals ( object $obj )
abstract public mixed hash ( void )
}

Sequenzschnittstelle: Eine Sequenz entspricht einem eindimensionalen numerischen Schlüsselarray, mit dem Ausnahme einiger Merkmale:

Werte werden immer als [0, 1, 2, …, Größe - 1] indiziert.

Der Zugriff auf Werte ist nur per Index in erlaubt der Bereich [0, Größe - 1].

Anwendungsfälle:

Überall dort, wo Sie ein Array als Liste verwenden würden (ohne Rücksicht auf Schlüssel).

Effizienter Alternative zu SplDoublyLinkedList und SplFixedArray.


Vector-Klasse: Vector ist eine Folge von Werten in einem kontinuierlichen Puffer, der automatisch wächst und schrumpft. Es handelt sich um die effizienteste sequentielle Struktur, der Index des Werts wird direkt dem Index im Puffer zugeordnet und der Wachstumsfaktor ist nicht an ein bestimmtes Vielfaches oder Exponenten gebunden. Es hat die folgenden Vor- und Nachteile:

Unterstützt Array-Syntax (eckige Klammern).

Benötigt weniger Gesamtspeicher als ein Array für die gleiche Anzahl von Werten.

Wird automatisch freigegeben zugewiesener Speicher, wenn seine Größe niedrig genug ist.

Kapazität muss keine Potenz von 2 sein.

get(), set(), push(), pop() sind alle O (1 ).

Aber Shift(), Unshift(), Insert() und Remove() sind alle O(n).

Ds\Vector::allocate — Allocates enough memory for a required capacity.
Ds\Vector::apply — Updates all values by applying a callback function to each value.
Ds\Vector::capacity — Returns the current capacity.
Ds\Vector::clear — Removes all values.
Ds\Vector::__construct — Creates a new instance.
Ds\Vector::contains — Determines if the vector contains given values.
Ds\Vector::copy — Returns a shallow copy of the vector.
Ds\Vector::count — Returns the number of values in the collection.
Ds\Vector::filter — Creates a new vector using a callable to determine which values to include.
Ds\Vector::find — Attempts to find a value's index.
Ds\Vector::first — Returns the first value in the vector.
Ds\Vector::get — Returns the value at a given index.
Ds\Vector::insert — Inserts values at a given index.
Ds\Vector::isEmpty — Returns whether the vector is empty
Ds\Vector::join — Joins all values together as a string.
Ds\Vector::jsonSerialize — Returns a representation that can be converted to JSON.
Ds\Vector::last — Returns the last value.
Ds\Vector::map — Returns the result of applying a callback to each value.
Ds\Vector::merge — Returns the result of adding all given values to the vector.
Ds\Vector::pop — Removes and returns the last value.
Ds\Vector::push — Adds values to the end of the vector.
Ds\Vector::reduce — Reduces the vector to a single value using a callback function.
Ds\Vector::remove — Removes and returns a value by index.
Ds\Vector::reverse — Reverses the vector in-place.
Ds\Vector::reversed — Returns a reversed copy.
Ds\Vector::rotate — Rotates the vector by a given number of rotations.
Ds\Vector::set — Updates a value at a given index.
Ds\Vector::shift — Removes and returns the first value.
Ds\Vector::slice — Returns a sub-vector of a given range.
Ds\Vector::sort — Sorts the vector in-place.
Ds\Vector::sorted — Returns a sorted copy.
Ds\Vector::sum — Returns the sum of all values in the vector.
Ds\Vector::toArray — Converts the vector to an array.
Ds\Vector::unshift — Adds values to the front of the vector.

Deque-Klasse: Die Abkürzung für „Double-Ended Queue“, die auch in DsQueue verwendet wird, hat zwei Zeiger, Kopf und Schwanz. Die Zeiger können das Ende des Puffers „umschließen“, wodurch die Notwendigkeit vermieden wird, andere Werte zu verschieben, um Platz zu schaffen – etwas, mit dem ein DsVector nicht mithalten kann. Es hat die folgenden Vorteile und Nachteile:

Unterstützt Array-Syntax (eckige Klammern).

Benötigt weniger Gesamtspeicher als ein Array für die gleiche Anzahl von Werten.

Gibt zugewiesenen Speicher automatisch frei, wenn seine Größe erreicht ist fällt tief genug ab.

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

Aber die Kapazität muss sei eine Potenz von 2.insert() und remove() sind O(n).

Map-Klasse: Eine kontinuierliche Sammlung von Schlüssel-Wert-Paaren, fast dasselbe wie ein Array. Schlüssel können beliebiger Art sein, müssen jedoch eindeutig sein. Wenn der Wert mit demselben Schlüssel zur Karte hinzugefügt wird, wird er ersetzt. Es hat die folgenden Vor- und Nachteile:

Schlüssel und Werte können jeden Typ haben, einschließlich Objekte.

Unterstützt Array-Syntax (eckige Klammern).

Einfügereihenfolge ist bleibt erhalten.

Leistung und Effizienz des Speichers sind einem Array sehr ähnlich.

Gibt zugewiesenen Speicher automatisch frei, wenn seine Größe niedrig genug ist.

Kann nicht konvertiert werden zu einem Array, wenn Objekte als Schlüssel verwendet werden.

Paarklasse:Ein Paar wird von DsMap verwendet, um Schlüssel mit Werten zu koppeln.

Ds\Pair implements JsonSerializable {
/* 方法 */
public __construct ([ mixed $key [, mixed $value ]] )
}

Klasse festlegen: Eine Folge eindeutiger Werte. Diese Implementierung verwendet dieselbe Hash-Tabelle wie DsMap, wobei Werte als Schlüssel verwendet werden und der zugeordnete Wert ignoriert wird. Sie hat die folgenden Vor- und Nachteile:

Werte können jeden Typ haben, einschließlich Objekte.

Unterstützt Array-Syntax (eckige Klammern).

Einfügereihenfolge bleibt erhalten.

Gibt zugewiesenen Speicher automatisch frei, wenn seine Größe niedrig genug ist.

add( ), entfernen() und enthält() sind alle O(1).

unterstützt aber nicht push(), pop(), insert(), shift() oder unshift() .get() ist O(n), wenn vor dem Zugriffsindex gelöschte Werte vorhanden sind, andernfalls O(1)Stack-Klasse: „last „In, First Out“-Sammlung, erlaubt nur den Zugriff und die Iteration an der Spitze der Struktur.

Ds\Stack implements Ds\Collection {
/* 方法 */
public void allocate ( int $capacity )
public int capacity ( void )
public void clear ( void )
public Ds\Stack copy ( void )
public bool isEmpty ( void )
public mixed peek ( void )
public mixed pop ( void )
public void push ([ mixed $...values ] )
public array toArray ( void )
}

Warteschlangenklasse:

„First in, first out“-Sammlung, die Zugriff und Iteration nur auf der Strukturfront ermöglicht.

Ds\Queue implements Ds\Collection {
/* Constants */
const int MIN_CAPACITY = 8 ;
/* 方法 */
public void allocate ( int $capacity )
public int capacity ( void )
public void clear ( void )
public Ds\Queue copy ( void )
public bool isEmpty ( void )
public mixed peek ( void )
public mixed pop ( void )
public void push ([ mixed $...values ] )
public array toArray ( void )
}

PriorityQueue-Klasse:

Eine Prioritätswarteschlange ist einer Warteschlange sehr ähnlich, aber Werte werden mit einem angegebenen Wert in die Warteschlange verschoben Priorität: Der Wert mit der höchsten Priorität steht immer an der Spitze der Warteschlange, und die Reihenfolge „First in, first out“ von Elementen mit derselben Priorität bleibt weiterhin erhalten. Die Iteration auf einer PriorityQueue ist destruktiv und entspricht kontinuierlichen Pop-Vorgängen, bis die Warteschlange leer ist. Implementiert mit einem maximalen Heap.

Ds\PriorityQueue implements Ds\Collection {
/* Constants */
const int MIN_CAPACITY = 8 ;
/* 方法 */
public void allocate ( int $capacity )
public int capacity ( void )
public void clear ( void )
public Ds\PriorityQueue copy ( void )
public bool isEmpty ( void )
public mixed peek ( void )
public mixed pop ( void )
public void push ( mixed $value , int $priority )
public array toArray ( void )
}

Verwandte Empfehlungen:

Häufig verwendete Algorithmen in PHP und

Datenstrukturen

PHP-Grundlagen, ein Array und Datenstruktur

Python integriertDatenstrukturdetaillierte Erklärung

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der Datenstruktur-DS-Erweiterung in PHP. 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