Table des matières
1 Aperçu de la liste chaînée
2. Définition de liste chaînée unique
1 Définition
2. Les similitudes et les différences entre le pointeur de tête et le nœud de tête
3. Démonstration de code
3. Opérations de liste chaînée unique
1. Opération d'insertion
1) Simulation d'insertion
2) Idée d'algorithme pour insérer la i-ième donnée dans le nœud d'une liste chaînée unique
2. Opération de suppression
1) Simulation de suppression
2) Idée d'algorithme de suppression du i-ème nœud de données dans une liste chaînée
4. Comparaison entre la structure de liste chaînée unique et la structure de liste séquentielle
Maison Problème commun Une liste chaînée est une liste linéaire stockée dans quelle structure de stockage

Une liste chaînée est une liste linéaire stockée dans quelle structure de stockage

Nov 22, 2021 pm 03:04 PM
存储结构 链表

Une liste chaînée est une liste linéaire stockée dans une structure de stockage « chaînée ». Les adresses d'unité de stockage occupées par les éléments de données de la liste chaînée peuvent être continues ou discontinues. L'espace de stockage correspondant peut être alloué temporairement et dynamiquement selon les besoins. La relation logique entre les éléments de données peut être exprimée par « chaîne ».

Une liste chaînée est une liste linéaire stockée dans quelle structure de stockage

L'environnement d'exploitation de ce tutoriel : système Windows 7, ordinateur Dell G3.

Afin de surmonter les défauts de la structure de stockage des tables séquentielles, d'utiliser pleinement l'espace de stockage et d'améliorer l'efficacité opérationnelle, les tables linéaires peuvent utiliser une autre structure de stockage - Structure de stockage en chaîne. La structure de stockage liée de la liste linéaire est appelée « liste de liens »

1 Aperçu de la liste chaînée

Les adresses des unités de stockage occupées par les éléments de données de la liste chaînée peuvent être continues ou discontinues, selon les besoins. Appliquer temporairement et dynamiquement l'allocation de l'espace de stockage correspondant, et la relation logique entre les éléments de données peut être exprimée sous la forme d'une « chaîne ».

L'insertion et la suppression de listes chaînées ne nécessitent pas de déplacer des éléments de données, seule la chaîne doit être modifiée.

Classification des listes chaînées :

1. Classées par méthode d'allocation de mémoire de liste chaînée

① Liste chaînée dynamique

② Liste chaînée statique

2. Classifiée par méthode de liaison

① Liste chaînée unique

② Circulaire. liste chaînée

③ Liste chaînée double

(Ce sont toutes des listes chaînées dynamiques)

2. Définition de liste chaînée unique

1 Définition

Afin de représenter la relation logique entre chaque élément de données ai et son successeur direct. élément de données ai+1, pour chaque élément de données En plus de stocker ses propres informations , ai a également besoin de stocker des informations indiquant son successeur direct (emplacement de stockage - adresse du successeur).

Le champ qui stocke les informations sur les éléments de données est appelé champ de données, et le champ qui stocke les positions des successeurs directs est appelé champ de pointeur. Les informations stockées dans le champ de pointeur sont appelées un pointeur ou une chaîne.

Ces deux parties d'informations forment l'image de stockage de l'élément de données ai, qui est appelé node.

n nœuds sont liés dans une liste chaînée, qui est la structure de stockage liée de la liste linéaire (a1, a2, a3,...,an). Parce que chaque nœud de la liste chaînée ne contient qu'un seul champ de pointeur, c'est le cas. appelé C'est une liste chaînée unique.

Pour les listes linéaires, il y a toujours une tête et une queue, et les listes chaînées ne font pas exception. Le pointeur vers le premier nœud de la liste chaînée unique dans la liste chaînée est appelé pointeur principal L'accès à l'ensemble de la liste chaînée doit commencer à partir du pointeur principal, et chaque nœud suivant est pointé par le successeur. pointeur du nœud précédent. Le pointeur du dernier nœud de la liste chaînée est "null (généralement représenté par NULL)" - un pointeur nul.

Afin de faciliter la mise en œuvre de diverses opérations sur la liste chaînée, un nœud du même type est défini avant le premier nœud de données de la liste chaînée. Ce nœud est appelé nœud principal.

Le champ de données du nœud principal peut stocker des informations de drapeau spéciales telles que la longueur de la liste chaînée, ou il ne peut stocker aucune donnée.

Le premier nœud de données et le dernier nœud de la liste chaînée sont également appelés nœud principal et nœud de queue.

2. Les similitudes et les différences entre le pointeur de tête et le nœud de tête

Pointeur de tête :

  • Le pointeur de tête fait référence au pointeur pointant vers le premier nœud de la liste chaînée si la liste chaînée a un. nœud principal, il pointe vers le pointeur principal vers le nœud.
  • Le pointeur de tête a une fonction d'identification, et le pointeur de tête est souvent utilisé comme nom de la liste chaînée.
  • Peu importe que la liste chaînée soit vide ou non, le pointeur de tête n'est pas vide. Le pointeur de tête est un élément nécessaire de la liste chaînée.

Nœud d'en-tête :

  • Le nœud de tête est établi pour l'unification et la commodité des opérations. Il est placé avant le nœud du premier élément, et son champ de données est généralement involontaire.
  • Avec le nœud principal, les opérations d'insertion d'un nœud avant le nœud du premier élément et de suppression du premier nœud sont unifiées avec celles des autres nœuds.
  • Le nœud principal n'est pas nécessairement un élément nécessaire de la liste chaînée.

3. Démonstration de code

/*线性表的单链表存储结构*/
/*结点定义*/
typedef struct Node
{
    ElemType data;
    struct Node *next;
}Node;

/*单链表定义*/
typedef struct Node *LinkList;
Copier après la connexion

3. Opérations de liste chaînée unique

1. Opération d'insertion

1) Simulation d'insertion

Supposons que le nœud stockant l'élément e est s, et insérez s derrière le nœud ai.

Réflexion : Les deux phrases du code d'insertion peuvent-elles être échangées ?

Non, si vous le changez, les éléments suivants tels que ai+1 ne peuvent pas être trouvés, car le champ de pointeur de s ne pointe pas vers l'adresse de ai+1.

2) Idée d'algorithme pour insérer la i-ième donnée dans le nœud d'une liste chaînée unique

  • Déclarez un nœud p pour pointer vers le premier nœud de la liste chaînée, initialisez j=1 ;
  • Quand j
  • Si p est vide à la fin de la liste chaînée, cela signifie que le i-ème élément n'existe pas si ; la recherche est réussie, un nœud vide s est généré (à l'aide de la fonction malloc)
  • Attribuez l'élément de données e à s->data, c'est-à-dire insérez l'instruction standard pour s->data=e;
  •  : s->next=p->next; p->next=s;
  • Retour réussi.

2. Opération de suppression

1) Simulation de suppression

Supposons que le nœud stockant l'élément ai est q et que l'opération de suppression du nœud q d'une liste à chaînage unique doit être implémentée.

2) Idée d'algorithme de suppression du i-ème nœud de données dans une liste chaînée

  • Déclarez un nœud p pointant vers le premier nœud de la liste chaînée, initialisez j=1;
  • Quand j< ;i, traverse Dans la liste chaînée, laissez le pointeur de p reculer et pointer continuellement vers le nœud suivant, j++;
  • Si p est vide à la fin de la liste chaînée, cela signifie que le i-ième élément ne existe ; si la recherche réussit, le nœud p-> Assign à côté de q
  • Insérez l'instruction standard : p->next=q->next;
  • Attribuez le nœud q à e, qui est e=. q->data;
  • Relâchez le nœud q
  • Renvoyez le succès.

4. Comparaison entre la structure de liste chaînée unique et la structure de liste séquentielle

Méthode de stockage :

  • La table séquentielle utilise une unité de stockage continue pour stocker les éléments de données dans la liste linéaire en séquence
  • La liste chaînée simple utilise un stockage lié structure, utilisant un groupe d'unités de stockage arbitraires stocke des éléments de table linéaires

Performances temporelles :

①Recherche

  • Table séquentielle O(1)
  • Liste chaînée unique O(n)

②Insertion et suppression

  • Séquentielle table O(n )
  • Liste chaînée unique O(1)

Performances spatiales :

  • La table de séquence nécessite un espace de stockage pré-alloué Si elle est divisée en une grande taille, ce sera un gaspillage. divisée en une petite taille, cela provoquera facilement un débordement.
  • La liste chaînée n'a pas besoin de pré-allouer de l'espace de stockage. Vous pouvez en allouer autant que vous en avez besoin, et le nombre d'éléments n'est pas limité

Pour plus d'informations. connaissances, veuillez visiter la rubrique FAQ !

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!

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)

Une discussion approfondie de la structure de stockage physique du système de fichiers Linux ext2 Une discussion approfondie de la structure de stockage physique du système de fichiers Linux ext2 Mar 14, 2024 pm 09:06 PM

Le système de fichiers Linuxext2 est un système de fichiers utilisé sur la plupart des systèmes d'exploitation Linux. Il utilise une structure de stockage sur disque efficace pour gérer le stockage des fichiers et des répertoires. Avant d'aborder la structure de stockage physique du système de fichiers Linuxext2, nous devons d'abord comprendre quelques concepts de base. Dans le système de fichiers ext2, les données sont stockées dans des blocs de données (blocs), qui sont les plus petites unités allouables dans le système de fichiers. Chaque bloc de données a une taille fixe, généralement 1 Ko, 2 Ko ou 4

Recherchez le nième nœud de la dernière liste chaînée en C++ à l'aide de la méthode récursive Recherchez le nième nœud de la dernière liste chaînée en C++ à l'aide de la méthode récursive Sep 15, 2023 pm 05:53 PM

Étant donné une liste à chaînage unique et un entier positif N en entrée. Le but est de trouver le Nème nœud à partir de la fin de la liste donnée en utilisant la récursivité. Si la liste d'entrée a des nœuds a → b → c → d → e → f et N vaut 4, alors le 4ème nœud du dernier sera c. Nous allons d'abord parcourir jusqu'au dernier nœud de la liste et au retour du nombre d'incréments récursifs (retour en arrière). Lorsque count est égal à N, un pointeur vers le nœud actuel est renvoyé comme résultat. Examinons différents scénarios d'entrée et de sortie pour cela - Entrée - Liste : -1→5→7→12→2→96→33N=3 Sortie − Le Nième nœud du dernier est : 2 Explication − Le troisième nœud est 2 . Entrée - Liste : -12 → 53 → 8 → 19 → 20 → 96 → 33N = 8 Sortie – Le nœud n'existe pas

Structures de données PHP SPL : injectez de la vitesse et de la flexibilité dans vos projets Structures de données PHP SPL : injectez de la vitesse et de la flexibilité dans vos projets Feb 19, 2024 pm 11:00 PM

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

Comparaison de la complexité temporelle des algorithmes des tableaux PHP et des listes chaînées Comparaison de la complexité temporelle des algorithmes des tableaux PHP et des listes chaînées May 07, 2024 pm 01:54 PM

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).

Ajouter 1 à un nombre représenté par une liste chaînée Ajouter 1 à un nombre représenté par une liste chaînée Aug 29, 2023 pm 09:17 PM

Une représentation par liste chaînée d'un nombre est fournie comme ceci : Tous les nœuds de la liste chaînée sont considérés comme étant un chiffre du nombre. Les nœuds stockent les nombres de telle sorte que le premier élément de la liste chaînée contienne le chiffre le plus significatif du nombre et que le dernier élément de la liste chaînée contienne le chiffre le moins significatif du nombre. Par exemple, le nombre 202345 est représenté dans la liste chaînée par (2->0->2->3->4->5). Pour ajouter 1 à cette liste chaînée représentant des nombres, il faut vérifier la valeur du bit le moins significatif de la liste. Si c'est moins de 9 c'est ok, sinon le code changera le numéro suivant et ainsi de suite. Voyons maintenant un exemple pour comprendre comment procéder, 1999 est représenté par (1->9->9->9) et l'ajout de 1 devrait le changer.

Structure de données PHP : le charme des listes chaînées, exploration de l'organisation dynamique des données Structure de données PHP : le charme des listes chaînées, exploration de l'organisation dynamique des données Jun 04, 2024 pm 12:53 PM

Une liste chaînée est une structure de données qui utilise une série de nœuds avec des données et des pointeurs pour organiser les éléments, et est particulièrement adaptée au traitement de grands ensembles de données et aux opérations fréquentes d'insertion/suppression. Ses composants de base comprennent des nœuds (données et pointeurs vers le nœud suivant) et des nœuds principaux (pointant vers le premier nœud de la liste chaînée). Les opérations courantes de liste chaînée incluent : l’ajout (insertion de queue), la suppression (valeur spécifique) et le parcours.

Programme Python : ajouter des éléments à la première et à la dernière position de la liste chaînée Programme Python : ajouter des éléments à la première et à la dernière position de la liste chaînée Aug 23, 2023 pm 11:17 PM

En Python, une liste chaînée est une structure de données linéaire composée d'une séquence de nœuds, chaque nœud contenant une valeur et une référence au nœud suivant dans la liste chaînée. Dans cet article, nous verrons comment ajouter des éléments à la première et à la dernière position d'une liste chaînée en Python. LinkedList en Python Une liste chaînée est une structure de données de référence utilisée pour stocker un ensemble d'éléments. D'une certaine manière, cela ressemble à un tableau, mais dans un tableau, les données sont stockées dans des emplacements mémoire contigus, alors que dans une liste chaînée, les données ne sont pas soumises à cette condition. Cela signifie que les données ne sont pas stockées de manière séquentielle mais de manière aléatoire en mémoire. Cela soulève une question : comment pouvons-nous

Comment implémenter des opérations de liste chaînée en langage Go ? Comment implémenter des opérations de liste chaînée en langage Go ? Jun 10, 2023 pm 10:55 PM

LinkedList est une structure de données commune, composée d'une série de nœuds. Chaque nœud contient deux attributs clés : un champ de données (Data) et un champ de pointeur (Next). Parmi eux, le champ de données est utilisé pour stocker les données réelles et le champ de pointeur pointe vers le nœud suivant. De cette manière, les listes chaînées stockent les données de manière flexible et adaptée à de nombreux scénarios d'application différents. Dans le langage Go, la structure de liste chaînée est également bien prise en charge. Cont est fourni dans la bibliothèque standard intégrée de Go