Einführung: Im täglichen Leben verwenden Menschen oft Listen. Wenn wir beispielsweise manchmal einkaufen müssen, um alle Dinge zu kaufen, die wir kaufen möchten, bevor wir gehen, ist dies die Liste der Dinge, die wir verwenden müssen. Oder als wir in jungen Jahren in der Schule waren, listet die Schule nach jeder Prüfung die Ranglisten und Transkripte der zehn Top -Schüler in dieser Prüfung usw. auf. Dies sind alle Listen der Liste. Wir verwenden auch Listen in unseren Computern. Wo ist die Liste für die Verwendung geeignet? Wo ist es nicht für den Gebrauch geeignet?
Geeignet für die Verwendung: Wenn in der Liste nicht viele Elemente vorhanden sind, können Sie die Liste verwenden, da die Effizienz bei der Suche oder Sortierung der Elemente in der Liste sehr hoch ist. Im Gegenteil, wenn es in der Liste viele Elemente gibt, ist es nicht für die Verwendung der Liste geeignet.
1: Abstrakte Datentypdefinition der Liste
Um den abstrakten Datentyp einer Liste zu entwerfen, müssen wir eine Definition der Liste angeben, einschließlich der Attribute, die die Liste haben sollte, welche Vorgänge in der Liste ausgeführt werden sollten usw.
Eine Liste ist ein geordneter Datensatz. Die Datenelemente in jeder Liste werden als Elemente bezeichnet. In JavaScript können die Elemente in der Liste von jedem Datentyp sein. Es gibt keine vorherige Übereinstimmung darüber, wie viele Elemente in der Liste gespeichert werden können. Die Anzahl der Elemente ist jedoch durch den Programmspeicher begrenzt, wenn sie tatsächlich verwendet werden.
Jetzt möchten wir eine Liste entwerfen, dann können wir über die Implementierung einer Liste nachdenken. Welche Attribute und Methoden sollten sie enthalten? Natürlich sind meine folgenden Entwürfe auf der Grundlage der Demos im Buch "JavaScript -Datenstrukturen und -algorithmen" konzipiert. So können wir lernen, wie man unsere eigenen abstrakten Klassen als Referenz entwirft, wenn wir in Zukunft Programme schreiben. Das Wichtigste, was wir über Demos im Buch lernen, ist, ihre Designideen und das Schreiben von Code zu lernen. Sie haben die folgenden Attribute;
1. Listengröße (Eigenschaft): Verwenden Sie eine Listenvariable, um die Anzahl der Elemente in der Liste zu speichern.
2. POS (Eigenschaft): Die aktuelle Position der Liste, der Index des Elements.
3.. DataStore (Eigenschaft): Initialisieren Sie ein leeres Array, um die Anzahl der Elemente zu speichern. Wenn wir die Elemente in der spezifischen Liste einholen möchten, können wir das obige POS -Attribut verwenden. wie DataStore [POS];
Alle Methoden; Die folgende Liste wird erläutert und wird nicht nacheinander eingeführt.
Zwei: So implementieren Sie Listenklassen
Basierend auf der oben definierten list -abstrakten Datentyp können wir die folgende Listenklasse implementieren, wie folgt durch das Konstruktor + -Prototypmuster.
Die Codekopie lautet wie folgt:
Funktionsliste () {
// Anzahl der Elemente in der Liste
this.listSize = 0;
// Wie hoch ist die aktuelle Position der Liste?
this.pos = 0;
// Initialisieren Sie ein leeres Array, um Listenelemente zu speichern
this.datastore = [];
}
List.prototype = {
// Fügen Sie ein Element zum Ende der Liste hinzu
Anhang: Funktion (Element) {
var self = this;
self.datastore [this.listSize ++] = Element;
},
// Elemente aus der Liste entfernen
Entfernen: Funktion (Element) {
var self = this;
var curindex = self.find (Element);
if (curindex> -1) {
self.datastore.splice (curindex, 1);
--self.listSize;
zurückkehren;
}
false zurückgeben;
},
// Suchen Sie Elemente in der Liste, um den Index zurückzugeben
Finden: Funktion (Element) {
var self = this;
für (var i = 0, datalen = self.datastore.length; i <datalen; i ++) {
if (self.datastore [i] == Element) {
kehre I zurück;
}
}
Return -1;
},
// Geben Sie die Anzahl der Elemente in der Liste zurück
Länge: function () {
kehre dies zurück.
},
// Elemente in der Liste anzeigen
toString: function () {
kehre diesen.Datastore zurück;
},
/*
* Fügen Sie ein Element nach dem angegebenen Element ein
* @param Element aktuelles Element
* @Param Element nach dem aktuellen Element hinter diesem Element einfügen
*/
Einfügen: Funktion (Element, ElementAfter) {
var self = this;
var InsertPos = self.find (ElementAfter);
if (insertpos> -1) {
self.datastore.SPLICE (InsertPos+1,0, Element);
++ self.listSize;
zurückkehren;
}
false zurückgeben;
},
// Alle Elemente in der Liste löschen
klare: function () {
Löschen Sie dies. Datastore;
this.datastore = [];
this.listize = this.pos = 0;
},
// Bestimmen Sie, ob sich das angegebene Element in der Liste befindet
Enthält: Funktion (Element) {
var self = this;
für (var i = 0, ilen = self.datastore.length; i <ilen; i ++) {
if (self.datastore [i] == Element) {
zurückkehren;
}
}
false zurückgeben;
},
// Verschieben Sie das aktuelle Element in der Liste auf die erste Position
vorne: function () {
this.pos = 0;
},
// Verschieben Sie das aktuelle Element in der Liste auf die letzte Position
Ende: function () {
this.pos = this.listSize - 1;
},
// Bewegen Sie die aktuelle Position eins nach dem anderen
prev: function () {
if (this.pos> 0) {
-this.pos;
}
},
// Bewegen Sie die aktuelle Position eins nach dem anderen
Weiter: function () {
if (this.pos <this.listSize - 1) {
++ this.pos;
}
},
// Kehren Sie zum aktuellen Speicherort der Liste zurück
Curpos: function () {
kehre dies zurück.pos;
},
// Verschieben Sie die aktuelle Position in die angegebene Position
MoveTo: Funktion (n) {
this.pos = n;
},
// Geben Sie das Element an der aktuellen Position zurück
GetElement: function () {
kehre this.datastore [this.pos];
}
};
Wie oben: Implementieren Sie eine Listenklasse mit so vielen Methoden wie oben. Natürlich können wir auch einige andere Methoden erweitern, um die Implementierung der Listenklasse zu bereichern. Das Wichtigste ist, die Codierungsmethode wie oben zu lernen.