


JavaScript-Datenstrukturen und Algorithmen, Stapel und Warteschlangen_Grundkenntnisse
Ursache des Lernens
Ich bin einmal auf einen solchen Beitrag gestoßen, als ich V2EX durchstöberte.
Die Mathematik wird komplett dem Lehrer überlassen. Ich möchte einige grundlegende Mathematikkenntnisse erlernen, wahrscheinlich auf High-School-Niveau. Welche Bücher empfehlen Sie?
Der Verfasser der Nachricht verfügte nicht über Kurse für fortgeschrittene Mathematik an der Universität und war mit Front-End-Arbeit beschäftigt, als er zur Arbeit ging. Ich habe das Gefühl, dass meine mathematischen Kenntnisse fehlen, deshalb möchte ich Mathematik nachholen.
Nachdem ich den Beitrag gelesen habe, habe ich das Gefühl, dass er mir sehr ähnlich ist, da mein Hauptfach keine fortgeschrittene Mathematik erfordert und ich auch Front-End studiere. Ich habe auch die Schwierigkeiten gespürt, die durch den Mangel an mathematischen Kenntnissen entstehen. Da mein mathematisches Denken wirklich nicht sehr gut ist, beschloss ich gleichzeitig, hart zu arbeiten, um grundlegende Mathematik- und Computerkenntnisse zu erlernen.
Damals sagten einige Leute auch: „Welche Datenstrukturen und Algorithmen werden für das Frontend benötigt?“ Aber ich habe meine eigenen Ansichten zu diesem Thema.
Ich glaube nicht, dass das Front-End keine Kenntnisse wie Algorithmen benötigt. Meiner Meinung nach verfügt das Front-End über eine solide Computerbasis, was für die eigene Entwicklung äußerst vorteilhaft ist. Ich möchte Programmierer werden. Anstatt ein lebenslanger Junior-Frontend und Programmierer zu sein.
Es kann als Ermutigung für mich selbst angesehen werden. Schließlich bestimmen die Grundlagen die Obergrenze, und ich interessiere mich wirklich für Computer. Auch wenn das Lernen ermüdend ist, ist es auch sehr glücklich. Also ging ich online und kaufte das Buch „Learning JavaScript Data Structures and Algorithms“ und begann zusammen mit dem Buch „Dahua Data Structures“, das ich mir aus der Bibliothek ausgeliehen hatte, mit meinem Vorstudium über Datenstrukturen und Algorithmen.
Array-Operationen in JavaScipt
Der nächste Schritt ist der erste Teil der Datenstruktur, der Stack.
Der Stapel ist eine geordnete Sammlung, die dem Last-In-First-Out-Prinzip (LIFO, vollständiger Name: Last In First Out) folgt. Das oberste Element im Stapel ist immer das neueste Element.
Beispiel: Ein Stapel ist wie ein Stapel Bücher in einer Kiste. Wenn Sie das unterste Buch nehmen möchten, müssen Sie zuerst das oberste Buch entfernen. (Natürlich können Sie nicht zuerst das Buch unten nehmen.)
Implementierung des Stacks in JavaScipt
Erstellen Sie zunächst einen Konstruktor.
/** * 栈的构造函数 */ function Stack() { // 用数组来模拟栈 var item = []; }
Der Stapel muss über die folgenden Methoden verfügen:
push(element(s)): Füge mehrere Elemente oben im Stapel hinzu
pop(): Entferne das oberste Element des Stapels und gib es zurück
peek(): Gibt das oberste Element des Stapels
zurück
isAmpty: Überprüfen Sie, ob der Stapel leer ist. Wenn er leer ist, geben Sie true zurück
klar: alle Elemente vom Stapel entfernen
Größe: Gibt die Anzahl der Elemente im Stapel zurück.
Drucken: Zeigt den gesamten Inhalt des Stapels als Zeichenfolge
an
Implementierung der Push-Methode
Erläuterung: Dem Stapel muss ein neues Element hinzugefügt werden, und die Elementposition befindet sich am Ende der Warteschlange. Mit anderen Worten: Wir können die Push-Methode des Arrays verwenden, um die Implementierung zu simulieren.
Umsetzung:
/** * 将元素送入栈,放置于数组的最后一位 * @param {Any} element 接受的元素,不限制类型 */ this.push = function(element) { items.push(element); };
Implementierung der Pop-Methode
Erklärung: Es ist notwendig, das oberste Element des Stapels zu entfernen und gleichzeitig den entnommenen Wert zurückzugeben. Sie können die Pop-Methode des Arrays verwenden, um die Implementierung zu simulieren.
Umsetzung:
/** * 弹出栈顶元素 * @return {Any} 返回被弹出的值 */ this.pop = function() { return items.pop(); };
Implementierung der Peek-Methode
Hinweis: Die Anzeige des obersten Elements des Stapels kann mithilfe der Array-Länge erfolgen.
Umsetzung:
/** * 查看栈顶元素 * @return {Any} 返回栈顶元素 */ this.peek = function() { return items[items.length - 1]; }
Implementierung anderer Methoden
Hinweis: Die ersten drei sind der Kern der Stack-Methode, die übrigen Methoden werden hier gleichzeitig aufgelistet. Denn die unten besprochene Warteschlange wird sich stark mit diesem Teil überschneiden.
Umsetzung:
/** * 确定栈是否为空 * @return {Boolean} 若栈为空则返回true,不为空则返回false */ this.isAmpty = function() { return items.length === 0 }; /** * 清空栈中所有内容 */ this.clear = function() { items = []; }; /** * 返回栈的长度 * @return {Number} 栈的长度 */ this.size = function() { return items.length; }; /** * 以字符串显示栈中所有内容 */ this.print = function() { console.log(items.toString()); };
Praktische Anwendung
Es gibt viele praktische Anwendungen des Stapels. Es gibt eine Funktion im Buch, die Dezimalzahlen in Binärzahlen umwandelt. (Wenn Sie nicht wissen, wie man binär rechnet, können Sie Baidu verwenden.) Im Folgenden finden Sie den Quellcode der Funktion.
Das Prinzip besteht darin, die umzurechnende Zahl einzugeben, fortlaufend durch zwei zu dividieren und zu runden. Und schließlich verwenden Sie eine While-Schleife, um alle Zahlen im Stapel für die Ausgabe zu einer Zeichenfolge zu verketten.
/** * 将10进制数字转为2进制数字 * @param {Number} decNumber 要转换的10进制数字 * @return {Number} 转换后的2进制数字 */ function divideBy2(decNumber) { var remStack = new Stack(), rem, binaryString = ''; while (decNumber > 0) { rem = Math.floor(decNumber % 2); remStack.push(rem); decNumber = Math.floor(decNumber / 2); } while (!remStack.isAmpty()) { binaryString += remStack.pop().toString(); } return binaryString; };
An diesem Punkt endet das Studium des Stapels. Da der Quellcode viele Kommentare enthält, wird der Inhalt des Quellcodes hier nicht veröffentlicht.
Warteschlange
Warteschlange und Stapel sind sehr ähnliche Datenstrukturen. Der Unterschied besteht darin, dass die Warteschlange zuerst eingeht (FIFO: First In First Out).
Zum Beispiel: Wenn man am Bahnhof Schlange steht, um Fahrkarten zu kaufen, gilt: Wer zuerst kommt, mahlt zuerst. (Diejenigen, die sich anstellen, werden nicht mitgezählt.)
Implementierung der Warteschlange in JavaScipt
/** * 队列构造函数 */ function Queue() { var items = []; }
enqueue(element(s)): Mehrere Elemente am Ende der Warteschlange hinzufügen
dequeue(): Entfernen Sie das erste Element der Warteschlange (d. h. das oberste Element)
front(): Gibt das erste Element der Warteschlange zurück, das das zuletzt hinzugefügte
ist
Die übrigen Methoden sind die gleichen wie bei queue
Implementierung der Enqueue-Methode
Umsetzung:
/** * 将元素推入队列尾部 * @param {Any} ele 要推入队列的元素 */ this.enqueue = function(ele) { items.push(ele); };
Implementierung der Dequeue-Methode
Umsetzung:
/** * 将队列中第一个元素弹出 * @return {Any} 返回被弹出的元素 */ this.dequeue = function() { return items.shift() };
Umsetzung:
/** * 查看队列的第一个元素 * @return {Any} 返回队列中第一个元素 */ this.front = function() { return items[0]; };
以上的三个方法,就是队列这种数据结构的核心方法了。其实很好理解的。
实际应用
书上的是个击鼓传花的小游戏。原理就是循环到相应位置时,队列弹出那个元素。最后留下的就是赢家。
源代码如下:
/** * 击鼓传花的小游戏 * @param {Array} nameList 参与人员列表 * @param {Number} num 在循环中要被弹出的位置 * @return {String} 返回赢家(也就是最后活下来的那个) */ function hotPotato(nameList, num) { var queue = new Queue(); for (var i = 0; i < nameList.length; i++) { queue.enqueue(nameList[i]); } var eliminated = ''; while (queue.size() > 1) { for (var i = 0; i < num; i++) { queue.enqueue(queue.dequeue()); } eliminated = queue.dequeue(); console.log(eliminated + " Get out!") } return queue.dequeue() }
队列的学习到此就告一段落了。下一期将讲述另外一种数据结构: 链表。
感想
很多时候看书,直接看算法导论或者一些数据结构的书,都是很迷糊的。后来才发现,看书从自己能看懂的开始,由浅入深才是适合自己的学习方式。

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen











WebSocket und JavaScript: Schlüsseltechnologien zur Realisierung von Echtzeit-Überwachungssystemen Einführung: Mit der rasanten Entwicklung der Internet-Technologie wurden Echtzeit-Überwachungssysteme in verschiedenen Bereichen weit verbreitet eingesetzt. Eine der Schlüsseltechnologien zur Erzielung einer Echtzeitüberwachung ist die Kombination von WebSocket und JavaScript. In diesem Artikel wird die Anwendung von WebSocket und JavaScript in Echtzeitüberwachungssystemen vorgestellt, Codebeispiele gegeben und deren Implementierungsprinzipien ausführlich erläutert. 1. WebSocket-Technologie

JavaScript und WebSocket: Aufbau eines effizienten Echtzeit-Wettervorhersagesystems Einführung: Heutzutage ist die Genauigkeit von Wettervorhersagen für das tägliche Leben und die Entscheidungsfindung von großer Bedeutung. Mit der Weiterentwicklung der Technologie können wir genauere und zuverlässigere Wettervorhersagen liefern, indem wir Wetterdaten in Echtzeit erhalten. In diesem Artikel erfahren Sie, wie Sie mit JavaScript und WebSocket-Technologie ein effizientes Echtzeit-Wettervorhersagesystem aufbauen. In diesem Artikel wird der Implementierungsprozess anhand spezifischer Codebeispiele demonstriert. Wir

Leistungsanalyse und Optimierungsstrategie von JavaQueue Queue Zusammenfassung: Queue (Queue) ist eine der am häufigsten verwendeten Datenstrukturen in Java und wird in verschiedenen Szenarien häufig verwendet. In diesem Artikel werden die Leistungsprobleme von JavaQueue-Warteschlangen unter zwei Aspekten erörtert: Leistungsanalyse und Optimierungsstrategien sowie spezifische Codebeispiele. Einführungswarteschlange ist eine First-In-First-Out-Datenstruktur (FIFO), die zur Implementierung des Producer-Consumer-Modus, der Thread-Pool-Aufgabenwarteschlange und anderer Szenarien verwendet werden kann. Java bietet eine Vielzahl von Warteschlangenimplementierungen, wie z. B. Arr

JavaScript-Tutorial: So erhalten Sie HTTP-Statuscode. Es sind spezifische Codebeispiele erforderlich. Vorwort: Bei der Webentwicklung ist häufig die Dateninteraktion mit dem Server erforderlich. Bei der Kommunikation mit dem Server müssen wir häufig den zurückgegebenen HTTP-Statuscode abrufen, um festzustellen, ob der Vorgang erfolgreich ist, und die entsprechende Verarbeitung basierend auf verschiedenen Statuscodes durchführen. In diesem Artikel erfahren Sie, wie Sie mit JavaScript HTTP-Statuscodes abrufen und einige praktische Codebeispiele bereitstellen. Verwenden von XMLHttpRequest

Der Unterschied zwischen Java-Heap und Stack: 1. Speicherzuweisung und -verwaltung; 3. Thread-Ausführung und Lebenszyklus; Detaillierte Einführung: 1. Der Java-Heap ist ein dynamisch zugewiesener Speicherbereich, der hauptsächlich zum Speichern von Objektinstanzen verwendet wird. Wenn ein Objekt erstellt wird, wird der entsprechende Speicher zugewiesen Speicherplatz auf dem System und automatische Speicherbereinigung und Speicherverwaltung. Die Größe des Heaps kann zur Laufzeit dynamisch angepasst, über JVM-Parameter konfiguriert usw. werden.

Einführung in die Methode zum Abrufen des HTTP-Statuscodes in JavaScript: Bei der Front-End-Entwicklung müssen wir uns häufig mit der Interaktion mit der Back-End-Schnittstelle befassen, und der HTTP-Statuscode ist ein sehr wichtiger Teil davon. Das Verstehen und Abrufen von HTTP-Statuscodes hilft uns, die von der Schnittstelle zurückgegebenen Daten besser zu verarbeiten. In diesem Artikel wird erläutert, wie Sie mithilfe von JavaScript HTTP-Statuscodes erhalten, und es werden spezifische Codebeispiele bereitgestellt. 1. Was ist ein HTTP-Statuscode? HTTP-Statuscode bedeutet, dass der Dienst den Dienst anfordert, wenn er eine Anfrage an den Server initiiert

JavaScript und WebSocket: Aufbau einer effizienten Echtzeit-Suchmaschine Einführung: Mit der Entwicklung des Internets stellen Benutzer immer höhere Anforderungen an Echtzeit-Suchmaschinen. Bei der Suche mit herkömmlichen Suchmaschinen müssen Benutzer auf die Suchschaltfläche klicken, um Ergebnisse zu erhalten. Diese Methode kann den Anforderungen der Benutzer an Echtzeit-Suchergebnissen nicht gerecht werden. Daher ist die Verwendung von JavaScript und WebSocket-Technologie zur Implementierung von Echtzeitsuchmaschinen zu einem heißen Thema geworden. In diesem Artikel wird die Verwendung von JavaScript ausführlich vorgestellt

Überblick über die PHPSPL-Datenstrukturbibliothek Die PHPSPL-Datenstrukturbibliothek (Standard PHP Library) enthält eine Reihe von Klassen und Schnittstellen zum Speichern und Bearbeiten verschiedener Datenstrukturen. Zu diesen Datenstrukturen gehören Arrays, verknüpfte Listen, Stapel, Warteschlangen und Mengen, von denen jede einen bestimmten Satz von Methoden und Eigenschaften zum Bearbeiten von Daten bereitstellt. Arrays In PHP ist ein Array eine geordnete Sammlung, die eine Folge von Elementen speichert. Die SPL-Array-Klasse bietet erweiterte Funktionen für native PHP-Arrays, einschließlich Sortierung, Filterung und Zuordnung. Hier ist ein Beispiel für die Verwendung der SPL-Array-Klasse: useSplArrayObject;$array=newArrayObject(["foo","bar","baz"]);$array
