Maison >développement back-end >Tutoriel Python >Comment implémenter une liste liée dans Python?

Comment implémenter une liste liée dans Python?

Johnathan Smith
Johnathan Smithoriginal
2025-03-10 17:18:43624parcourir

Comment implémenter une liste liée dans Python?

L'implémentation d'une liste liée dans Python implique la création d'une classe Node pour représenter chaque élément et une classe LinkedList pour gérer la liste dans son ensemble. Chaque Node contient les données et un pointeur vers le nœud suivant dans la séquence. La classe LinkedList comprend généralement des méthodes d'insertion, de suppression, de recherche et de traversée.

Voici une implémentation de base:

<code class="python">class Node:
    def __init__(self, data):
        self.data = data
        self.next = None

class LinkedList:
    def __init__(self):
        self.head = None

    def append(self, data):
        new_node = Node(data)
        if not self.head:
            self.head = new_node
            return
        current = self.head
        while current.next:
            current = current.next
        current.next = new_node

    def prepend(self, data):
        new_node = Node(data)
        new_node.next = self.head
        self.head = new_node

    def delete_node(self, key):
        current = self.head
        if current and current.data == key:
            self.head = current.next
            current = None
            return

        prev = None
        while current and current.data != key:
            prev = current
            current = current.next

        if current is None:
            return

        prev.next = current.next
        current = None

    def print_list(self):
        current = self.head
        while current:
            print(current.data, end=" -> ")
            current = current.next
        print("None")

#Example Usage
llist = LinkedList()
llist.append(1)
llist.append(2)
llist.append(3)
llist.prepend(0)
llist.delete_node(2)
llist.print_list() # Output: 0 -> 1 -> 3 -> None
</code>

Cet exemple montre une liste individuelle (chaque nœud ne pointe que le suivant). Des listes doublement liées (nœuds pointent vers les nœuds suivants et précédents) sont également possibles, offrant différentes caractéristiques de performance pour certaines opérations.

Avantages et inconvénients des listes liées dans Python par rapport à d'autres structures de données

Avantages:

  • Taille dynamique: CHARGED OUCHED OUCHED ORD>
  • Taille dynamique: les listes de liens: SHOIND ORCHED ou SHOLLING: SHOINGS CHARGINE: Taille dynamique: les listes de liens ou le linke Facilement pendant l'exécution, contrairement aux tableaux qui nécessitent une pré-allocation de la mémoire.
  • Insertion et suppression efficaces:
  • L'insertion ou la suppression d'un nœud à n'importe quelle position dans une liste liée ne nécessite que quelques pointeurs, ce qui en fait des tableaux où les éléments peuvent avoir besoin d'être décalés. L'allocation de mémoire contigu, les listes liées peuvent être plus économes en mémoire que les tableaux, en particulier lorsqu'ils traitent des données clairsemées.
  • Les inconvénients:

L'accès aléatoire est inefficace:
    Accédant à une opération spécifique dans une liste liée nécessite des parasites qui offrent un accès aléatoire o (1).
  • Average de mémoire supplémentaire:
  • Chaque nœud nécessite une mémoire supplémentaire pour stocker le pointeur vers le nœud suivant.
  • Implémentation plus complexe:
  • Listes liées sont généralement plus complexes pour mettre en œuvre et débogue que des tableaux ou d'autres structures de données. Les listes (qui sont des tableaux dynamiques), les piles, les files d'attente et les arbres, les listes liées excellent lorsque des insertions et des suppressions fréquentes sont nécessaires à des positions arbitraires. Cependant, si l'accès aléatoire est crucial, les tableaux ou les listes de python sont de bien meilleurs choix.
  • Comment puis-je rechercher et supprimer efficacement les nœuds dans une implémentation de la liste liée à Python?
  • La recherche et la suppression des nœuds dans une liste liée impliquent intrinsèquement le trait. La recherche efficace signifie généralement minimiser le nombre de nœuds visités. Pour une liste individuelle, la recherche est intrinsèquement linéaire, o (n) complexité temporelle. La suppression d'un nœud nécessite de trouver le nœud à supprimer puis de mettre à jour les pointeurs de son prédécesseur et successeur.

La méthode delete_node dans l'exemple de code précédent démontre une suppression linéaire. Pour améliorer l'efficacité de la recherche, vous pouvez envisager d'utiliser un arbre de recherche binaire auto-équilibré ou une table de hachage si vous avez souvent besoin de rechercher des nœuds spécifiques. Cependant, ceux-ci nécessiteraient une restructuration significative de votre stockage de données.

Quels sont les cas d'utilisation courants pour les listes liées dans la programmation Python?

Les listes liées recherchent des applications dans des scénarios où l'insertion dynamique et la suppression sont plus important Mettez en œuvre ces structures de données fondamentales.

  • Représentant les polynômes: Chaque nœud peut représenter un terme dans un polynôme (coefficient et exposant).
  • Implémentation de la fonctionnalité UNDO / REDO: Une liste liée peut suivre les histoires des ajustements, permettant une autre annexe et une révocation. Players: A linked list can efficiently manage a playlist, allowing easy insertion and deletion of songs.
  • Maintaining a Log of Events: Each node could represent an event with a timestamp.
  • Graphs and Network Data Structures: Linked lists are used extensively in representing the adjacency lists of nodes in Les graphiques.
  • Essentiellement, chaque fois que le coût du changement d'éléments dans un tableau (en raison des insertions / suppressions fréquents) l'emporte sur le coût de l'accès séquentiel, une liste liée est un concurrent fort.

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:
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