
C# Linked List (Comment ça fonctionne pour les développeurs)
Une liste chaînée est une structure de données linéaire composée d'une série de nœuds, qui peuvent également être appelés éléments. Contrairement aux tableaux, où les éléments/nœuds sont stockés dans des emplacements de mémoire contigus, les listes chaînées utilisent l'allocation dynamique de mémoire, permettant aux éléments/nœuds d'être dispersés dans la mémoire.
Dans sa forme la plus simple, les " listes chaînées " se composent de nœuds reliés linéairement. Chaque nœud contient deux parties principales :
- Données : Charge utile stockée dans le nœud. Cela peut être de n'importe quel type de données selon l'implémentation, tels que des entiers, des chaînes, des objets, etc.
- Pointeur suivant : Une référence (ou pointeur) vers le nœud suivant dans la séquence. Ce pointeur indique l'emplacement mémoire du nœud suivant en avant dans la liste chaînée.
Le dernier nœud d'une liste chaînée pointe généralement vers une référence nulle, indiquant la fin de la liste.
Dans cet article, nous allons examiner en détail la liste chaînée en C# et explorer également la bibliothèque IronPDF, un outil de génération de PDF de Iron Software.
Types de listes chaînées
1. Liste chaînée simplement
Une liste chaînée simplement a un nœud avec une seule référence, pointant généralement vers le nœud suivant dans la séquence. Le parcours de la liste est limité à un mouvement dans une seule direction, typiquement de la tête (le nœud initial) à la queue (le nœud final).
2. Liste chaînée doublement
Dans une liste chaînée doublement, chaque nœud contient deux références : l'une pointant vers le nœud suivant et l'autre pointant vers le nœud précédent dans la séquence. Ce lien bidirectionnel permet un parcours dans les deux directions, avant et arrière.
3. Liste chaînée circulaire
Dans une liste chaînée circulaire, le dernier nœud renvoie au premier nœud, formant une structure circulaire. Ce type de liste chaînée peut être mis en œuvre en utilisant soit des nœuds simplement chaînés soit doublement chaînés.
Opérations de base sur les listes chaînées
- Insertion : Ajout d'un nouveau nœud à la liste à une position spécifique, telle que le début, la fin ou le milieu.
- Suppression : suppression d'un nœud d'objet spécifié de la liste et ajustement des pointeurs des nœuds voisins en conséquence.
- Parcours : itération sur la liste pour accéder aux données de chaque nœud ou les manipuler.
- Recherche : Trouver un nœud spécifique dans la liste en fonction de sa valeur spécifiée dans les données.
Linked List in C#
En C#, vous pouvez implémenter une liste chaînée en utilisant la classe LinkedList du namespace System.Collections.Generic. Voici un exemple de toutes les opérations de base :
using System;
using System.Collections.Generic;
namespace CsharpSamples
{
public class Program
{
public static void Main()
{
// Create a new linked list of integers
LinkedList<int> linkedList = new LinkedList<int>();
// Add elements to the linked list
linkedList.AddLast(10);
linkedList.AddLast(20);
linkedList.AddLast(30);
linkedList.AddLast(40);
// Traverse and print the elements of the linked list
Console.WriteLine("Traverse Linked List elements:");
foreach (var item in linkedList)
{
Console.WriteLine(item);
}
// Display number of linked list elements
Console.WriteLine($"Number of Linked List elements: {linkedList.Count}");
// Find/Search for an element in the linked list
Console.WriteLine("\nFind/Search Element Linked List elements: 30");
var foundNode = linkedList.Find(30);
if (foundNode != null)
{
Console.WriteLine(
$"Found Value: {foundNode.Value}, " +
$"Next Element: {(foundNode.Next != null ? foundNode.Next.Value.ToString() : "null")}, " +
$"Previous Element: {(foundNode.Previous != null ? foundNode.Previous.Value.ToString() : "null")}"
);
}
// Insert an element at a specified node
LinkedListNode<int> current = linkedList.Find(20);
if (current != null)
{
linkedList.AddAfter(current, 25);
}
Console.WriteLine($"\nNumber of Linked List elements: {linkedList.Count}");
Console.WriteLine("\nLinked List elements after insertion:");
foreach (var item in linkedList)
{
Console.WriteLine(item);
}
// Remove an existing node from the linked list
linkedList.Remove(30);
Console.WriteLine("\nLinked List elements after removal:");
foreach (var item in linkedList)
{
Console.WriteLine(item);
}
Console.WriteLine($"\nNumber of Linked List elements: {linkedList.Count}");
}
}
}Imports System
Imports System.Collections.Generic
Namespace CsharpSamples
Public Class Program
Public Shared Sub Main()
' Create a new linked list of integers
Dim linkedList As New LinkedList(Of Integer)()
' Add elements to the linked list
linkedList.AddLast(10)
linkedList.AddLast(20)
linkedList.AddLast(30)
linkedList.AddLast(40)
' Traverse and print the elements of the linked list
Console.WriteLine("Traverse Linked List elements:")
For Each item In linkedList
Console.WriteLine(item)
Next
' Display number of linked list elements
Console.WriteLine($"Number of Linked List elements: {linkedList.Count}")
' Find/Search for an element in the linked list
Console.WriteLine(vbCrLf & "Find/Search Element Linked List elements: 30")
Dim foundNode = linkedList.Find(30)
If foundNode IsNot Nothing Then
Console.WriteLine(
$"Found Value: {foundNode.Value}, " &
$"Next Element: {If(foundNode.Next IsNot Nothing, foundNode.Next.Value.ToString(), "null")}, " &
$"Previous Element: {If(foundNode.Previous IsNot Nothing, foundNode.Previous.Value.ToString(), "null")}"
)
End If
' Insert an element at a specified node
Dim current As LinkedListNode(Of Integer) = linkedList.Find(20)
If current IsNot Nothing Then
linkedList.AddAfter(current, 25)
End If
Console.WriteLine(vbCrLf & $"Number of Linked List elements: {linkedList.Count}")
Console.WriteLine(vbCrLf & "Linked List elements after insertion:")
For Each item In linkedList
Console.WriteLine(item)
Next
' Remove an existing node from the linked list
linkedList.Remove(30)
Console.WriteLine(vbCrLf & "Linked List elements after removal:")
For Each item In linkedList
Console.WriteLine(item)
Next
Console.WriteLine(vbCrLf & $"Number of Linked List elements: {linkedList.Count}")
End Sub
End Class
End NamespaceExplication du code
- Créez une nouvelle liste chaînée d'entiers en utilisant
new LinkedList<int>(). - Ajouter des objets avec des valeurs spécifiées à la liste chaînée.
- Parcourez et imprimez les éléments de la liste chaînée en utilisant une boucle
foreach. - Trouver/rechercher un élément dans la liste chaînée.
- Insérez un élément à un nœud spécifié en utilisant les méthodes
FindetAddAfter. - Supprimez un nœud existant de la liste chaînée en utilisant la méthode
Remove.
Sortie

Présentation d'IronPDF
Découvrez-en plus sur IronPDF est une bibliothèque PDF C# puissante développée et maintenue par Iron Software. Elle fournit un ensemble complet de fonctionnalités pour créer, éditer, et extraire le contenu de documents PDF dans les projets .NET.
Points clés sur IronPDF
Conversion HTML en PDF
IronPDF vous permet de convertir du contenu HTML au format PDF. Vous pouvez facilement rendre des pages HTML, des URL et des chaînes HTML en PDF.
API riche
La bibliothèque offre une API conviviale permettant aux développeurs de générer des PDF de qualité professionnelle directement à partir de HTML. Que vous ayez besoin de créer des factures, des rapports ou d'autres documents, IronPDF simplifie le processus.
Support Multiplateforme
IronPDF est compatible avec divers environnements .NET, incluant .NET Core, .NET Standard et .NET Framework. Il fonctionne sur les plateformes Windows, Linux et macOS.
Polyvalence
IronPDF prend en charge différents types de projets, tels que les applications web (Blazor et WebForms), les applications de bureau (WPF et MAUI), et les applications de console.
Sources de contenu
Vous pouvez générer des PDFs à partir de diverses sources de contenu, y compris des fichiers HTML, des vues Razor (Blazor Server), des CSHTML (MVC et Razor), des ASPX (WebForms), et des XAML (MAUI).
Fonctionnalités supplémentaires
- Ajouter des en-têtes et pieds de page aux PDFs.
- Fusionner, diviser, ajouter, copier et supprimer des pages PDF.
- Définir des mots de passe, des autorisations, et des signatures numériques.
- Optimiser les performances avec la prise en charge du multithreading et de l'asynchrone.
Compatibilité
IronPDF se conforme aux normes PDF, y compris les versions 1.2 à 1.7, PDF/UA, et PDF/A. Il prend également en charge l'encodage de caractères UTF-8, les URLs de base, et l'encodage des ressources.
Générez un document PDF en utilisant LinkedList
Maintenant, créons un document PDF en utilisant IronPDF et démontrons aussi l'utilisation des chaînes LinkedList.
Pour commencer, ouvrez Visual Studio et créez une application console en sélectionnant parmi les modèles de projet comme indiqué ci-dessous.

Fournissez un nom de projet et un emplacement.

Sélectionnez la version .NET requise.

Installez IronPDF à partir du Package Manager de Visual Studio comme celui ci-dessous.

Ou il peut être installé en utilisant la ligne de commande ci-dessous.
Ajoutez le code ci-dessous.
using System;
using System.Collections.Generic;
using IronPdf;
namespace CsharpSamples
{
public class Program
{
public static void Main()
{
var content = "<h1>Demonstrate IronPDF with C# LinkedList</h1>";
content += "<h2>Create a new linked list of strings</h2>";
content += "<p>Create a new linked list of strings with new LinkedList<string>()</p>";
// Create a new linked list of strings
LinkedList<string> linkedList = new LinkedList<string>();
// Add elements to the linked list
content += "<p>Add Apple to linkedList</p>";
linkedList.AddLast("Apple");
content += "<p>Add Banana to linkedList</p>";
linkedList.AddLast("Banana");
content += "<p>Add Orange to linkedList</p>";
linkedList.AddLast("Orange");
content += "<h2>Print the elements of the linked list</h2>";
Console.WriteLine("Linked List elements:");
foreach (var item in linkedList)
{
content += $"<p>{item}</p>";
Console.WriteLine(item);
}
content += "<h2>Insert an element at a specific position</h2>";
LinkedListNode<string> node = linkedList.Find("Banana");
if (node != null)
{
linkedList.AddAfter(node, "Mango");
content += "<p>Find Banana and insert Mango After</p>";
}
Console.WriteLine("\nLinked List elements after insertion:");
content += "<h2>Linked List elements after insertion:</h2>";
foreach (var item in linkedList)
{
content += $"<p>{item}</p>";
Console.WriteLine(item);
}
content += "<h2>Remove an element from the linked list</h2>";
linkedList.Remove("Orange");
content += "<p>Remove Orange from linked list</p>";
Console.WriteLine("\nLinked List elements after removal:");
content += "<h2>Linked List elements after removal:</h2>";
foreach (var item in linkedList)
{
content += $"<p>{item}</p>";
Console.WriteLine(item);
}
// Create a PDF renderer
var renderer = new ChromePdfRenderer();
// Create a PDF from HTML string
var pdf = renderer.RenderHtmlAsPdf(content);
// Save to a file
pdf.SaveAs("AwesomeIronOutput.pdf");
}
}
}Imports System
Imports System.Collections.Generic
Imports IronPdf
Namespace CsharpSamples
Public Class Program
Public Shared Sub Main()
Dim content As String = "<h1>Demonstrate IronPDF with C# LinkedList</h1>"
content += "<h2>Create a new linked list of strings</h2>"
content += "<p>Create a new linked list of strings with new LinkedList<string>()</p>"
' Create a new linked list of strings
Dim linkedList As New LinkedList(Of String)()
' Add elements to the linked list
content += "<p>Add Apple to linkedList</p>"
linkedList.AddLast("Apple")
content += "<p>Add Banana to linkedList</p>"
linkedList.AddLast("Banana")
content += "<p>Add Orange to linkedList</p>"
linkedList.AddLast("Orange")
content += "<h2>Print the elements of the linked list</h2>"
Console.WriteLine("Linked List elements:")
For Each item In linkedList
content += $"<p>{item}</p>"
Console.WriteLine(item)
Next
content += "<h2>Insert an element at a specific position</h2>"
Dim node As LinkedListNode(Of String) = linkedList.Find("Banana")
If node IsNot Nothing Then
linkedList.AddAfter(node, "Mango")
content += "<p>Find Banana and insert Mango After</p>"
End If
Console.WriteLine(vbCrLf & "Linked List elements after insertion:")
content += "<h2>Linked List elements after insertion:</h2>"
For Each item In linkedList
content += $"<p>{item}</p>"
Console.WriteLine(item)
Next
content += "<h2>Remove an element from the linked list</h2>"
linkedList.Remove("Orange")
content += "<p>Remove Orange from linked list</p>"
Console.WriteLine(vbCrLf & "Linked List elements after removal:")
content += "<h2>Linked List elements after removal:</h2>"
For Each item In linkedList
content += $"<p>{item}</p>"
Console.WriteLine(item)
Next
' Create a PDF renderer
Dim renderer = New ChromePdfRenderer()
' Create a PDF from HTML string
Dim pdf = renderer.RenderHtmlAsPdf(content)
' Save to a file
pdf.SaveAs("AwesomeIronOutput.pdf")
End Sub
End Class
End NamespaceExplication du code
- Tout d'abord, nous commençons par créer le contenu pour le PDF, en utilisant un objet de chaîne de contenu. Le contenu est généré sous forme de chaîne HTML.
- Créez une nouvelle liste chaînée de chaînes de caractères avec
new LinkedList<string>(). - Ajoutez des éléments à la liste liée et ajoutez également des informations à la chaîne de contenu PDF.
- Imprimez les éléments de la liste liée et ajoutez-les au contenu PDF.
- Insérez un élément à une position spécifique en utilisant la méthode
AddAfter; mettez à jour le contenu et imprimez la liste résultante. - Supprimez un élément de la liste chaînée en utilisant la méthode
Remove, mettez à jour le contenu, et imprimez la liste résultante. - Enfin, sauvegardez la chaîne de contenu HTML générée dans un document PDF en utilisant les méthodes
ChromePdfRenderer,RenderHtmlAsPdf, etSaveAs.
Sortie

La sortie a un filigrane qui peut être retiré en utilisant une licence valide de la page de licence IronPDF.
Licence IronPDF
La bibliothèque IronPDF nécessite une licence pour fonctionner, et elle peut être obtenue depuis la page de licence du produit.
Collez la clé dans le fichier appSettings.json ci-dessous.
{
"IronPdf.License.LicenseKey": "The Key Goes Here"
}
Conclusion
C# LinkedList fournit une structure de données polyvalente pour gérer des collections d'éléments, offrant des insertions et suppressions efficaces tout en permettant un redimensionnement dynamique, similaire à la fonction de hachage par défaut. Les listes chaînées sont couramment utilisées dans diverses applications et algorithmes, tels que l'implémentation de piles, de files, de tables de symboles et de systèmes de gestion de mémoire. Comprendre les caractéristiques et les opérations des listes chaînées est essentiel pour construire des solutions logicielles efficaces et évolutives.
En résumé, bien que les listes chaînées excellent dans certains scénarios, tels que les structures de données dynamiques et les insertions/suppressions fréquentes, elles ne sont peut-être pas le meilleur choix pour les applications nécessitant un accès aléatoire fréquent ou traitant des environnements sensibles à la mémoire. Une considération attentive des exigences spécifiques et des caractéristiques des données peut orienter la sélection de la structure de données la plus appropriée pour la tâche à accomplir.
La bibliothèque IronPDF d'Iron Software permet aux développeurs de créer et de manipuler des documents PDF sans effort, ce qui permet d'acquérir des compétences avancées pour développer des applications modernes.

Jacob Mellor est directeur de la technologie chez Iron Software et un ingénieur visionnaire pionnier de la technologie C# PDF. En tant que développeur à l'origine de la base de code centrale d'Iron Software, il a façonné l'architecture des produits de l'entreprise depuis sa création, la transformant aux côtés du PDG Cameron Rimington en une entreprise de plus de 50 personnes au service de la NASA, de Tesla et d'agences gouvernementales mondiales.
Articles connexes


