


Introduction à la méthode d'implémentation de liste chaînée dans la structure de données JavaScript (image et texte)
La liste chaînée est une structure de données commune. C'est une structure qui alloue dynamiquement le stockage. Cet article présente principalement l'implémentation de listes chaînées dans la structure de données JavaScript, qui a une bonne valeur de référence. Jetons-y un coup d'œil avec l'éditeur ci-dessous
L'affiche précédente traitait respectivement de l'implémentation des piles et des files d'attente de structures de données. Les structures de données utilisées à cette époque étaient toutes implémentées à l'aide de tableaux, mais parfois les tableaux ne sont pas les meilleurs. optimale. Structure de données optimale, par exemple, lors de l'ajout et de la suppression d'éléments dans un tableau, d'autres éléments doivent être déplacés et l'utilisation de la méthode spit() en JavaScript ne nécessite pas d'accès à d'autres éléments. Si vous trouvez que l'utilisation de tableaux est lente, envisagez d'utiliser des listes chaînées.
Le concept de liste chaînée
La liste chaînée est une structure de données courante. C'est une structure qui alloue dynamiquement le stockage. La liste chaînée possède une variable « pointeur de tête », représentée par head, qui stocke une adresse pointant vers un élément. Chaque nœud utilise la référence d'un objet pour pointer vers son successeur. Une référence pointant vers un autre nœud est appelée une chaîne.
Les éléments du tableau sont référencés par des indices (positions), tandis que les éléments de la liste chaînée sont référencés par leurs relations. Par conséquent, l'efficacité d'insertion de la liste chaînée est très élevée. La figure suivante montre le processus d'insertion du nœud de liste chaînée d :
Processus de suppression :
<.>
Liste chaînée basée sur des objets
Nous définissons deux classes, la classe Node et la classe LinkedList sont les données du nœud, et LinkedList enregistre les méthodes pour. exploiter la liste chaînée. Premier coup d'oeil à la classe Node :function Node(element){ this.element = element; this.next = null; }
function LinkedList(){ this.head = new Node('head'); this.find = find; this.insert = insert; this.remove = remove; this.show = show; }
function find(item){ var currentNode = this.head;//从头结点开始 while(currentNode.element!=item){ currentNode = currentNode.next; } return currentNode;//找到返回结点数据,没找到返回null }
function insert(newElement,item){ var newNode = new Node(newElement); var currentNode = this.find(item); newNode.next = currentNode.next; currentNode.next = newNode; }
function frontNode(item){ var currentNode = this.head; while(currentNode.next.element!=item&¤tNode.next!=null){ currentNode = currentNode.next; } return currentNode; }
function remove(item){ var frontNode = this.frontNode(item); //console.log(frontNode.element); frontNode.next = frontNode.next.next; }
function show(){ var currentNode = this.head,result; while(currentNode.next!=null){ result += currentNode.next.element;//为了不显示head结点 currentNode = currentNode.next; } }
var list = new LinkedList(); list.insert("a","head"); list.insert("b","a"); list.insert("c","b"); console.log(list.show()); list.remove("b"); console.log(list.show());
Le passage du nœud de tête au nœud de queue de la liste chaînée est très simple, mais parfois, nous devons parcourir de l'arrière vers l'avant. À ce stade, nous pouvons ajouter un
attributà l'objet Node, qui stocke le lien vers le nœud prédécesseur. L'affiche utilise le diagramme suivant pour illustrer le principe de fonctionnement d'une liste doublement chaînée.
Nous ajoutons d'abord l'attribut front à la classe Node :
function Node(element){ this.element = element; this.next = null; this.front = null; }
function insert(newElement,item){ var newNode = new Node(newElement); var currentNode = this.find(item); newNode.next = currentNode.next; newNode.front = currentNode;//增加front指向前驱结点 currentNode.next = newNode; } function remove(item){ var currentNode = this.find(item);//找到需要删除的节点 if (currentNode.next != null) { currentNode.front.next = currentNode.next;//让前驱节点指向需要删除的节点的下一个节点 currentNode.next.front = currentNode.front;//让后继节点指向需要删除的节点的上一个节点 currentNode.next = null;//并设置前驱与后继的指向为空 currentNode.front = null; } }
Vous devez ajouter une méthode à la liste doublement chaînée pour trouver le dernier nœud. La méthode findLast() trouve le dernier nœud de la liste chaînée, éliminant ainsi le besoin de parcourir la chaîne d'avant en arrière.
Réaliser une sortie dans l'ordre inverse :function findLast() {//查找链表的最后一个节点 var currentNode = this.head; while (currentNode.next != null) { currentNode = currentNode.next; } return currentNode; }
function showReverse() { var currentNode = this.head, result = ""; currentNode = this.findLast(); while(currentNode.front!=null){ result += currentNode.element + " "; currentNode = currentNode.front; } return result; }
var list = new LinkedList(); list.insert("a","head"); list.insert("b","a"); list.insert("c","b"); console.log(list); list.remove("b"); console.log(list.show()); console.log(list.showReverse());
La liste chaînée circulaire est une autre forme de structure de stockage liée. Sa caractéristique est que le champ de pointeur du dernier nœud de la liste pointe vers le nœud principal et que l'ensemble de la liste chaînée forme un anneau. Les listes chaînées circulaires sont similaires aux listes chaînées unidirectionnelles et les types de nœuds sont les mêmes. La seule différence est que lors de la création d'une liste chaînée circulaire, laissez l'attribut suivant de son nœud principal pointer vers lui-même, c'est-à-dire :
head.next = head
Ce comportement sera transmis à chaque élément dans les nœuds de la liste chaînée, de sorte que l'attribut suivant de chaque nœud pointe vers le nœud principal de la liste chaînée. L'affiche utilise l'image suivante pour représenter une liste chaînée circulaire :
Modifier la
: 这时需要注意链表的输出方法show()与find()方法,原来的方式在循环链表里会陷入死循环,while循环的循环条件需要修改为当循环到头节点时退出循环。 测试程序: 测试结果: Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!function LinkedList(){
this.head = new Node('head');//初始化
this.head.next = this.head;//直接将头节点的next指向头节点形成循环链表
this.find = find;
this.frontNode = frontNode;
this.insert = insert;
this.remove = remove;
this.show = show;
}
function find(item){
var currentNode = this.head;//从头结点开始
while(currentNode.element!=item&¤tNode.next.element!='head'){
currentNode = currentNode.next;
}
return currentNode;//找到返回结点数据,没找到返回null
}
function show(){
var currentNode = this.head,result = "";
while (currentNode.next != null && currentNode.next.element != "head") {
result += currentNode.next.element + " ";
currentNode = currentNode.next;
}
return result;
}
var list = new LinkedList();
list.insert("a","head");
list.insert("b","a");
list.insert("c","b");
console.log(list.show());
list.remove("b");
console.log(list.show());

Outils d'IA chauds

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

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

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

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

Sujets chauds

Lors de l'utilisation de structures de données complexes en Java, Comparator est utilisé pour fournir un mécanisme de comparaison flexible. Les étapes spécifiques comprennent : la définition d’une classe de comparaison et la réécriture de la méthode de comparaison pour définir la logique de comparaison. Créez une instance de comparaison. Utilisez la méthode Collections.sort, en transmettant les instances de collection et de comparateur.

Les types de référence sont un type de données spécial dans le langage Go. Leurs valeurs ne stockent pas directement les données elles-mêmes, mais l'adresse des données stockées. Dans le langage Go, les types de référence incluent des tranches, des cartes, des canaux et des pointeurs. Une compréhension approfondie des types de référence est cruciale pour comprendre les méthodes de gestion de la mémoire et de transfert de données du langage Go. Cet article combinera des exemples de code spécifiques pour présenter les caractéristiques et l'utilisation des types de référence dans le langage Go. 1. Tranches Les tranches sont l'un des types de référence les plus couramment utilisés dans le langage Go.

Les structures de données et les algorithmes sont à la base du développement Java. Cet article explore en profondeur les structures de données clés (telles que les tableaux, les listes chaînées, les arbres, etc.) et les algorithmes (tels que le tri, la recherche, les algorithmes graphiques, etc.) en Java. Ces structures sont illustrées par des exemples pratiques, notamment l'utilisation de tableaux pour stocker les scores, de listes chaînées pour gérer les listes de courses, de piles pour implémenter la récursion, de files d'attente pour synchroniser les threads, ainsi que d'arbres et de tables de hachage pour une recherche et une authentification rapides. Comprendre ces concepts vous permet d'écrire du code Java efficace et maintenable.

Présentation de Java Collection Framework L'infrastructure de collection Java est une partie importante du langage de programmation Java. Elle fournit une série de bibliothèques de classes conteneur qui peuvent stocker et gérer des données. Ces bibliothèques de classes de conteneurs ont différentes structures de données pour répondre aux besoins de stockage et de traitement des données dans différents scénarios. L'avantage du framework de collection est qu'il fournit une interface unifiée, permettant aux développeurs d'exploiter différentes bibliothèques de classes de conteneurs de la même manière, réduisant ainsi la difficulté de développement. Structures de données de l'infrastructure de collection Java L'infrastructure de collection Java contient diverses structures de données, chacune ayant ses propres caractéristiques et scénarios applicables. Voici plusieurs structures de données courantes du cadre de collection Java : 1. Liste : Liste est une collection ordonnée qui permet de répéter des éléments. Li

L'arbre AVL est un arbre de recherche binaire équilibré qui garantit des opérations de données rapides et efficaces. Pour atteindre l'équilibre, il effectue des opérations de virage à gauche et à droite, en ajustant les sous-arbres qui violent l'équilibre. Les arbres AVL utilisent l'équilibrage de hauteur pour garantir que la hauteur de l'arbre est toujours petite par rapport au nombre de nœuds, réalisant ainsi des opérations de recherche de complexité temporelle logarithmique (O (logn)) et maintenant l'efficacité de la structure de données même sur de grands ensembles de données.

Une étude approfondie des mystères de la structure des données du langage Go nécessite des exemples de code spécifiques. En tant que langage de programmation concis et efficace, le langage Go montre également son charme unique dans le traitement des structures de données. La structure des données est un concept de base en informatique, qui vise à organiser et gérer les données afin qu'elles puissent être consultées et manipulées plus efficacement. En apprenant en profondeur les mystères de la structure des données du langage Go, nous pouvons mieux comprendre comment les données sont stockées et exploitées, améliorant ainsi l'efficacité de la programmation et la qualité du code. 1. Array Array est l'une des structures de données les plus simples

Comparaison de la complexité temporelle de l'algorithme des tableaux et des listes chaînées : accès aux tableaux O(1), listes chaînées O(n), insertion de tableaux O(1)/O(n) ; ), listes chaînées O(n) (n); Tableau de recherche O(n), liste chaînée O(n).

Présentation de la bibliothèque de structures de données PHPSPL La bibliothèque de structures de données PHPSPL (Standard PHP Library) contient un ensemble de classes et d'interfaces pour stocker et manipuler diverses structures de données. Ces structures de données comprennent des tableaux, des listes chaînées, des piles, des files d'attente et des ensembles, chacun fournissant un ensemble spécifique de méthodes et de propriétés pour manipuler les données. Tableaux En PHP, un tableau est une collection ordonnée qui stocke une séquence d'éléments. La classe de tableau SPL fournit des fonctions améliorées pour les tableaux PHP natifs, notamment le tri, le filtrage et le mappage. Voici un exemple d'utilisation de la classe array SPL : useSplArrayObject;$array=newArrayObject(["foo","bar","baz"]);$array
