Maison interface Web js tutoriel Structures de données et algorithmes JavaScript, piles et files d'attente_Connaissances de base

Structures de données et algorithmes JavaScript, piles et files d'attente_Connaissances de base

May 16, 2016 pm 03:16 PM
javascript 队列

Cause de l'apprentissage

Je suis tombé une fois sur un tel article alors que je parcourais V2EX.
Les mathématiques sont entièrement laissées à l'appréciation de l'enseignant. Je souhaite apprendre quelques mathématiques de base, probablement au niveau secondaire. Quels livres recommandez-vous ?
L'affiche qui a publié le message n'avait pas suivi de cours avancés de mathématiques à l'université et avait été engagé dans un travail de première ligne lorsqu'il se rendait au travail. J'ai l'impression que mes connaissances en mathématiques font défaut, je souhaite donc rattraper mon retard en mathématiques.
Après avoir lu l'article, j'ai l'impression qu'il me ressemble beaucoup, car ma spécialisation ne nécessite pas de mathématiques avancées et j'étudie également le front-end. J'ai aussi ressenti les difficultés causées par le manque de connaissances mathématiques. En même temps, parce que ma pensée mathématique n'est vraiment pas très bonne, j'ai décidé de travailler dur pour apprendre les bases des mathématiques et de l'informatique.
À cette époque, certaines personnes ont également dit : « Quelles structures de données et quels algorithmes sont nécessaires pour le front-end ? Mais j'ai mon propre point de vue sur cette question.
Je ne pense pas que le front-end n'ait pas besoin de connaissances telles que les algorithmes. À mon avis, le front-end dispose d'une base informatique solide, ce qui est extrêmement bénéfique pour son propre développement. Je veux être programmeur. Plutôt que d'être un front-end et un codeur junior à vie.
Cela peut être considéré comme un encouragement pour moi-même. Après tout, les bases déterminent la limite supérieure, et je m'intéresse beaucoup aux ordinateurs, donc même si c'est fatiguant d'apprendre, c'est aussi très heureux. Je suis donc allé en ligne et j'ai acheté le livre "Apprendre les structures et algorithmes de données JavaScript", et avec le livre "Structures de données Dahua" que j'ai emprunté à la bibliothèque, j'ai commencé mon étude préliminaire des structures de données et des algorithmes.

Opérations sur les tableaux dans JavaScipt

L'étape suivante est la première partie de la structure des données, la pile.
La pile est une collection ordonnée qui suit le principe du dernier entré, premier sorti (LIFO, nom complet : Last In First Out). Le haut de la pile est toujours l’élément le plus récent.
Par exemple : une pile est comme une pile de livres placée dans une boîte. Si vous souhaitez prendre le livre du bas, vous devez d'abord retirer le livre du haut. (Bien sûr, vous ne pouvez pas prendre le livre ci-dessous en premier.)

Implémentation de la stack en JavaScipt
Tout d’abord, créez un constructeur.

/**
 * 栈的构造函数
 */
function Stack() {

 // 用数组来模拟栈
 var item = [];
}

Copier après la connexion

La pile doit avoir les méthodes suivantes :
push(element(s)) : Ajouter plusieurs éléments en haut de la pile
pop() : supprime et renvoie l'élément supérieur de la pile
peek() : renvoie l'élément supérieur de la pile
isAmpty : Vérifiez si la pile est vide, si elle est vide, retournez true
clear : supprime tous les éléments de la pile
size : renvoie le nombre d'éléments dans la pile.
print : Afficher tout le contenu de la pile sous forme de chaîne
Mise en place de la méthode push
Explication : Un nouvel élément doit être ajouté à la pile et la position de l'élément est à la fin de la file d'attente. En d’autres termes, nous pouvons utiliser la méthode push du tableau pour simuler l’implémentation.

Mise en œuvre :

/**
 * 将元素送入栈,放置于数组的最后一位
 * @param {Any} element 接受的元素,不限制类型
 */
this.push = function(element) {
 items.push(element);
};
Copier après la connexion

Mise en place de la méthode pop

Explication : Il est nécessaire de faire apparaître l'élément supérieur de la pile et de renvoyer la valeur sautée en même temps. Vous pouvez utiliser la méthode pop du tableau pour simuler l'implémentation.
Mise en œuvre :

/**
 * 弹出栈顶元素
 * @return {Any} 返回被弹出的值
 */
this.pop = function() {
 return items.pop();
};
Copier après la connexion

Mise en place de la méthode peek
Remarque : L'affichage de l'élément supérieur de la pile peut être obtenu en utilisant la longueur du tableau.
Mise en œuvre :

/**
 * 查看栈顶元素
 * @return {Any} 返回栈顶元素
 */
this.peek = function() {
 return items[items.length - 1];
}
Copier après la connexion

Mise en œuvre d'autres méthodes
Remarque : Les trois premières constituent le cœur de la méthode stack et les méthodes restantes sont répertoriées ici en même temps. Parce que la file d’attente dont il sera question ci-dessous chevauchera grandement cette partie.
Mise en œuvre :

/**
 * 确定栈是否为空
 * @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());
};

Copier après la connexion

Application pratique

Il existe de nombreuses applications pratiques de la pile. Il existe une fonction dans le livre qui convertit le nombre décimal en binaire. (Si vous ne savez pas comment calculer en binaire, vous pouvez utiliser Baidu.) Voici le code source de la fonction.
Le principe est de saisir le nombre à convertir, de diviser par deux en continu et d'arrondir. Et enfin, utilisez une boucle while pour concaténer tous les nombres de la pile en une chaîne pour la sortie.

/**
 * 将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;
};

Copier après la connexion

À ce stade, l'étude de la pile touche à sa fin. Comme le code source contient de nombreux commentaires, le contenu du code source ne sera pas publié ici.

File d'attente

La file d'attente et la pile sont des structures de données très similaires. La différence est que la file d'attente est premier entré, premier sorti (FIFO : First In First Out).
Par exemple : lorsque vous faites la queue pour acheter des billets à la gare, le premier arrivé est le premier. (Ceux qui font la queue ne sont pas comptés). N'est-ce pas facile à comprendre~

Implémentation de la file d'attente dans JavaScipt

L'implémentation de la file d'attente est très similaire à celle de la pile. Le premier est toujours le constructeur :

/**
 * 队列构造函数
 */
function Queue() {
 var items = [];
}
Copier après la connexion

La file d'attente doit avoir les méthodes suivantes :
enqueue(element(s)) : Ajouter plusieurs éléments à la fin de la file d'attente
dequeue() : Supprime le premier élément de la file d'attente (c'est-à-dire l'élément le plus haut)
front() : renvoie le premier élément de la file d'attente, qui est le dernier
ajouté Le reste des méthodes est le même que la file d'attente

Mise en œuvre de la méthode de mise en file d'attente

Description : Ajoutez plusieurs éléments à la fin de la file d'attente.
Mise en œuvre :

/**
 * 将元素推入队列尾部
 * @param {Any} ele 要推入队列的元素
 */
this.enqueue = function(ele) {
 items.push(ele);
};
Copier après la connexion

Mise en œuvre de la méthode dequeue

Description : Supprimez le premier élément de la file d'attente.
Mise en œuvre :

/**
 * 将队列中第一个元素弹出
 * @return {Any} 返回被弹出的元素
 */
this.dequeue = function() {
 return items.shift()
};
Copier après la connexion

Mise en œuvre de la méthode front

Description : Renvoie le premier élément de la file d'attente, qui est le dernier ajouté.
Mise en œuvre :

/**
 * 查看队列的第一个元素
 * @return {Any} 返回队列中第一个元素
 */
this.front = function() {
 return items[0];
};
Copier après la connexion

以上的三个方法,就是队列这种数据结构的核心方法了。其实很好理解的。

实际应用
书上的是个击鼓传花的小游戏。原理就是循环到相应位置时,队列弹出那个元素。最后留下的就是赢家。
源代码如下:

/**
 * 击鼓传花的小游戏
 * @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()
}

Copier après la connexion

队列的学习到此就告一段落了。下一期将讲述另外一种数据结构: 链表。

感想

很多时候看书,直接看算法导论或者一些数据结构的书,都是很迷糊的。后来才发现,看书从自己能看懂的开始,由浅入深才是适合自己的学习方式。

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

WebSocket et JavaScript : technologies clés pour mettre en œuvre des systèmes de surveillance en temps réel WebSocket et JavaScript : technologies clés pour mettre en œuvre des systèmes de surveillance en temps réel Dec 17, 2023 pm 05:30 PM

WebSocket et JavaScript : technologies clés pour réaliser des systèmes de surveillance en temps réel Introduction : Avec le développement rapide de la technologie Internet, les systèmes de surveillance en temps réel ont été largement utilisés dans divers domaines. L'une des technologies clés pour réaliser une surveillance en temps réel est la combinaison de WebSocket et de JavaScript. Cet article présentera l'application de WebSocket et JavaScript dans les systèmes de surveillance en temps réel, donnera des exemples de code et expliquera leurs principes de mise en œuvre en détail. 1. Technologie WebSocket

JavaScript et WebSocket : créer un système efficace de prévisions météorologiques en temps réel JavaScript et WebSocket : créer un système efficace de prévisions météorologiques en temps réel Dec 17, 2023 pm 05:13 PM

JavaScript et WebSocket : Construire un système efficace de prévisions météorologiques en temps réel Introduction : Aujourd'hui, la précision des prévisions météorologiques revêt une grande importance pour la vie quotidienne et la prise de décision. À mesure que la technologie évolue, nous pouvons fournir des prévisions météorologiques plus précises et plus fiables en obtenant des données météorologiques en temps réel. Dans cet article, nous apprendrons comment utiliser la technologie JavaScript et WebSocket pour créer un système efficace de prévisions météorologiques en temps réel. Cet article démontrera le processus de mise en œuvre à travers des exemples de code spécifiques. Nous

Tutoriel JavaScript simple : Comment obtenir le code d'état HTTP Tutoriel JavaScript simple : Comment obtenir le code d'état HTTP Jan 05, 2024 pm 06:08 PM

Tutoriel JavaScript : Comment obtenir le code d'état HTTP, des exemples de code spécifiques sont requis Préface : Dans le développement Web, l'interaction des données avec le serveur est souvent impliquée. Lors de la communication avec le serveur, nous devons souvent obtenir le code d'état HTTP renvoyé pour déterminer si l'opération a réussi et effectuer le traitement correspondant en fonction de différents codes d'état. Cet article vous apprendra comment utiliser JavaScript pour obtenir des codes d'état HTTP et fournira quelques exemples de codes pratiques. Utilisation de XMLHttpRequest

Stratégies d'analyse et d'optimisation des performances des files d'attente Java Queue Stratégies d'analyse et d'optimisation des performances des files d'attente Java Queue Jan 09, 2024 pm 05:02 PM

Analyse des performances et stratégie d'optimisation de JavaQueue Résumé de la file d'attente : La file d'attente (file d'attente) est l'une des structures de données couramment utilisées en Java et est largement utilisée dans divers scénarios. Cet article abordera les problèmes de performances des files d'attente JavaQueue sous deux aspects : l'analyse des performances et les stratégies d'optimisation, et donnera des exemples de code spécifiques. Introduction La file d'attente est une structure de données premier entré, premier sorti (FIFO) qui peut être utilisée pour implémenter le mode producteur-consommateur, la file d'attente des tâches du pool de threads et d'autres scénarios. Java fournit une variété d'implémentations de files d'attente, telles que Arr

Quelles sont les différences entre le tas Java et la pile Quelles sont les différences entre le tas Java et la pile Dec 25, 2023 pm 05:29 PM

La différence entre le tas et la pile Java : 1. Allocation et gestion de la mémoire ; 2. Contenu du stockage 3. Exécution des threads et cycle de vie ; 4. Impact sur les performances. Introduction détaillée : 1. Allocation et gestion de la mémoire. Le tas Java est une zone de mémoire allouée dynamiquement, principalement utilisée pour stocker les instances d'objets. En Java, les objets sont alloués via la mémoire tas. Lorsqu'un objet est créé, la machine virtuelle Java alloue la mémoire correspondante. espace sur le système et effectuer automatiquement le garbage collection et la gestion de la mémoire. La taille du tas peut être ajustée dynamiquement au moment de l'exécution, configurée via les paramètres JVM, etc.

Comment obtenir facilement le code d'état HTTP en JavaScript Comment obtenir facilement le code d'état HTTP en JavaScript Jan 05, 2024 pm 01:37 PM

Introduction à la méthode d'obtention du code d'état HTTP en JavaScript : Dans le développement front-end, nous devons souvent gérer l'interaction avec l'interface back-end, et le code d'état HTTP en est une partie très importante. Comprendre et obtenir les codes d'état HTTP nous aide à mieux gérer les données renvoyées par l'interface. Cet article explique comment utiliser JavaScript pour obtenir des codes d'état HTTP et fournit des exemples de code spécifiques. 1. Qu'est-ce que le code d'état HTTP ? Le code d'état HTTP signifie que lorsque le navigateur lance une requête au serveur, le service

JavaScript et WebSocket : créer un moteur de recherche en temps réel efficace JavaScript et WebSocket : créer un moteur de recherche en temps réel efficace Dec 17, 2023 pm 10:13 PM

JavaScript et WebSocket : Construire un moteur de recherche en temps réel efficace Introduction : Avec le développement d'Internet, les utilisateurs ont des exigences de plus en plus élevées en matière de moteurs de recherche en temps réel. Lors d'une recherche avec les moteurs de recherche traditionnels, les utilisateurs doivent cliquer sur le bouton de recherche pour obtenir des résultats. Cette méthode ne peut pas répondre aux besoins des utilisateurs en matière de résultats de recherche en temps réel. Par conséquent, l’utilisation des technologies JavaScript et WebSocket pour mettre en œuvre des moteurs de recherche en temps réel est devenue un sujet brûlant. Cet article présentera en détail l'utilisation de JavaScript

Comment mettre en œuvre un système de signature électronique en ligne à l'aide de WebSocket et JavaScript Comment mettre en œuvre un système de signature électronique en ligne à l'aide de WebSocket et JavaScript Dec 18, 2023 pm 03:09 PM

Présentation de l'utilisation de WebSocket et de JavaScript pour mettre en œuvre un système de signature électronique en ligne : Avec l'avènement de l'ère numérique, les signatures électroniques sont largement utilisées dans divers secteurs pour remplacer les signatures papier traditionnelles. En tant que protocole de communication full-duplex, WebSocket peut effectuer une transmission de données bidirectionnelle en temps réel avec le serveur. En combinaison avec JavaScript, un système de signature électronique en ligne peut être mis en œuvre. Cet article expliquera comment utiliser WebSocket et JavaScript pour développer un outil en ligne simple.

See all articles