AYUDA .NET

C# Linked List (Cómo funciona para desarrolladores)

Actualizado junio 6, a. m.
Compartir:

Una lista enlazada es una estructura de datos lineal compuesta por una serie de nodos, que también pueden denominarse elementos. A diferencia de las matrices, en las que los elementos/nodos se almacenan en ubicaciones de memoria contiguas, las listas enlazadas utilizan la asignación dinámica de memoria, lo que permite que los elementos/nodos estén dispersos por toda la memoria.

En su forma más simple, las "listas enlazadas" están formadas por nodos enlazados linealmente. Cada nodo contiene dos partes principales:

  1. Datos: Carga útil almacenada en el nodo. Puede ser de cualquier tipo de datos dependiendo de la implementación, como enteros, cadenas, objetos, etc.
  2. Puntero siguiente: Una referencia (o puntero) al siguiente nodo de la secuencia. Este puntero indica la ubicación de memoria del siguiente nodo apunta hacia adelante en la lista enlazada.

    El último nodo de una lista enlazada suele apuntar a una referencia nula, indicando el final de la lista.

    En este artículo, veremos en detalle la lista Enlazada en C# y también IronPDFuna biblioteca de generación de PDF de Iron Software.

Tipos de listas enlazadas

1. Lista enlazada simple

La lista enlazada simple tiene un nodo con una sola referencia, que normalmente apunta al siguiente nodo de la secuencia. El recorrido de la lista se limita a un movimiento en una dirección, normalmente desde la cabeza (el nodo inicial) a la cola (el nodo final).

2. Lista doblemente enlazada

En una lista doblemente enlazada, cada nodo contiene dos referencias: una que apunta al nodo siguiente y otra que apunta al nodo anterior de la secuencia. Esta conexión bidireccional permite avanzar y retroceder.

3. Lista enlazada circular

En una lista circular enlazada, el último nodo vuelve a apuntar al primero, formando una estructura circular. Este tipo de lista enlazada puede implementarse utilizando nodos simple o doblemente enlazados.

Operaciones básicas con listas enlazadas

  1. Inserción: Añadir un nuevo nodo a la lista en una posición específica, como el principio, el final o el medio.
  2. Borrado: Eliminar un nodo objeto especificado de la lista, y ajustar los punteros de los nodos vecinos en consecuencia.
  3. Recorrido: Iterar a través de la lista para acceder o manipular los datos de cada nodo.
  4. Búsqueda: Encontrar un nodo específico en la lista basándose en su valor especificado en los datos.

Lista enlazada en C#

En C#, puede implementar una lista enlazada utilizando el método Lista de enlaces del espacio de nombres System.Collections.Generic. Aquí tienes un ejemplo de todas las operaciones básicas:

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 which create objects from node class
            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);
            }
            Console.WriteLine($"Number of Linked List elements:{linkedList.Count}"); // use count property to display length
            // Find/Search Element in Linked List
            Console.WriteLine("\nFind/Search Element Linked List elements: 30");
            var foundNode = linkedList.Find(30);// method returns the node
            Console.WriteLine($"Found Value:{foundNode.Value}, Next Element:{foundNode.Next.Value}, Previous Element:{foundNode.Previous.Value}"); // prints next node, previous node
            // Insert an element at a specified node
            LinkedListNode<int> current = linkedList.Find(20);
            linkedList.AddAfter(current, 25);
            Console.WriteLine($"\nNumber of Linked List elements:{linkedList.Count}"); // use count property to display length
            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); // remove current node
            Console.WriteLine("\nLinked List elements after removal:");
            foreach (var item in linkedList)
            {
                Console.WriteLine(item);
            }
            Console.WriteLine($"\nNumber of Linked List elements:{linkedList.Count}"); // use count property to display length
        }
    }
}
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 which create objects from node class
            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);
            }
            Console.WriteLine($"Number of Linked List elements:{linkedList.Count}"); // use count property to display length
            // Find/Search Element in Linked List
            Console.WriteLine("\nFind/Search Element Linked List elements: 30");
            var foundNode = linkedList.Find(30);// method returns the node
            Console.WriteLine($"Found Value:{foundNode.Value}, Next Element:{foundNode.Next.Value}, Previous Element:{foundNode.Previous.Value}"); // prints next node, previous node
            // Insert an element at a specified node
            LinkedListNode<int> current = linkedList.Find(20);
            linkedList.AddAfter(current, 25);
            Console.WriteLine($"\nNumber of Linked List elements:{linkedList.Count}"); // use count property to display length
            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); // remove current node
            Console.WriteLine("\nLinked List elements after removal:");
            foreach (var item in linkedList)
            {
                Console.WriteLine(item);
            }
            Console.WriteLine($"\nNumber of Linked List elements:{linkedList.Count}"); // use count property to display length
        }
    }
}
Imports Microsoft.VisualBasic

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 which create objects from node class
			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 item
			Console.WriteLine($"Number of Linked List elements:{linkedList.Count}") ' use count property to display length
			' Find/Search Element in Linked List
			Console.WriteLine(vbLf & "Find/Search Element Linked List elements: 30")
			Dim foundNode = linkedList.Find(30) ' method returns the node
			Console.WriteLine($"Found Value:{foundNode.Value}, Next Element:{foundNode.Next.Value}, Previous Element:{foundNode.Previous.Value}") ' prints next node, previous node
			' Insert an element at a specified node
			Dim current As LinkedListNode(Of Integer) = linkedList.Find(20)
			linkedList.AddAfter(current, 25)
			Console.WriteLine($vbLf & "Number of Linked List elements:{linkedList.Count}") ' use count property to display length
			Console.WriteLine(vbLf & "Linked List elements after insertion:")
			For Each item In linkedList
				Console.WriteLine(item)
			Next item
			' Remove an existing node from the linked list 
			linkedList.Remove(30) ' remove current node
			Console.WriteLine(vbLf & "Linked List elements after removal:")
			For Each item In linkedList
				Console.WriteLine(item)
			Next item
			Console.WriteLine($vbLf & "Number of Linked List elements:{linkedList.Count}") ' use count property to display length
	End Sub
End Class
End Namespace
VB   C#

Código Explicación

  1. Crear una nueva lista enlazada de enteros utilizando el nuevo LinkedList<int>()
  2. Objetos de valor especificados adicionales a una lista enlazada
  3. Recorrer e imprimir los elementos de la lista enlazada mediante el bucle foreach.
  4. Buscar un elemento en una lista enlazada
  5. Insertar un elemento en un nodo especificado mediante los métodos Find y `AddAfter
  6. Eliminar un nodo existente de la lista enlazada mediante el método Eliminar

Salida

Lista enlazada en C# (Cómo funciona para desarrolladores): Figura 1 - Salida de la lista enlazada

Presentación de IronPDF

IronPDF es una potente biblioteca PDF en C# desarrollada y mantenida por Iron Software. Proporciona un completo conjunto de funciones para crear, editar y extraer contenido de documentos PDF dentro de proyectos .NET.

Puntos clave sobre IronPDF

Conversión de HTML a PDF

IronPDF permite convertir contenidos HTML a formato PDF. Puede convertir páginas HTML, URL y cadenas HTML en PDF con facilidad.

API enriquecida

La biblioteca ofrece una API fácil de usar que permite a los desarrolladores generar PDF de calidad profesional directamente a partir de HTML. Tanto si necesita crear facturas, informes u otros documentos, IronPDF simplifica el proceso.

Soporte multiplataforma

IronPDF es compatible con varios entornos .NET, incluidos .NET Core, .NET Standard y .NET Framework. Funciona en plataformas Windows, Linux y macOS.

Versatilidad

IronPDF admite diferentes tipos de proyectos, como aplicaciones web (Blazor y WebForms)aplicaciones de escritorio (WPF y MAUI)y aplicaciones de consola.

Fuentes de contenido

Puede generar PDF a partir de varias fuentes de contenido, incluidos archivos HTML, vistas Razor (Servidor Blazor)CSHTML (MVC y Razor)ASPX (Formularios web)y XAML (MAUI).

Características adicionales

  1. Añade encabezados y pies de página a los PDF.
  2. Fusione, divida, añada, copie y elimine páginas PDF.
  3. Establezca contraseñas, permisos y firmas digitales.
  4. Optimice el rendimiento con multihilo y soporte asíncrono.

Compatibilidad

IronPDF cumple los estándares PDF, incluidas las versiones 1.2 a 1.7, PDF/UA y PDF/A. También admite codificación de caracteres UTF-8, URL base y codificación de activos.

Generar un documento PDF utilizando LinkedList.

Ahora vamos a crear un documento PDF utilizando IronPDF y también una demostración del uso de cadenas LinkedList.

Para empezar, abra Visual Studio y cree una aplicación de consola seleccionando una de las plantillas de proyecto que se muestran a continuación.

Lista enlazada en C# (Cómo funciona para desarrolladores): Figura 2 - Nuevo proyecto

Indique el nombre y la ubicación del proyecto.

Lista enlazada en C# (Cómo funciona para los desarrolladores): Figura 3 - Configuración del proyecto

Seleccione la versión .NET necesaria.

Lista enlazada en C# (Cómo funciona para los desarrolladores): Figura 4 - Marco de destino

Instale IronPDF desde el gestor de paquetes de Visual Studio como el que se muestra a continuación.

Lista enlazada en C# (Cómo funciona para desarrolladores): Figura 5 - Instalar IronPDF

O se puede instalar utilizando la siguiente línea de comandos.

dotnet add package IronPdf --version 2024.4.2

Añade el siguiente código.

using 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></p>";
            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>";
            // Print the elements of the linked list
            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>";
            // Insert an element at a specific position
            LinkedListNode<string> node = linkedList.Find("Banana");
            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>";
            // Remove an element from the linked list
            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 Renderer
            var renderer = new ChromePdfRenderer();
            // Create a PDF from HTML string
            var pdf = renderer.RenderHtmlAsPdf(content);
            // Save to a file or Stream
            pdf.SaveAs("AwesomeIronOutput.pdf");        
    }
}
using 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></p>";
            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>";
            // Print the elements of the linked list
            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>";
            // Insert an element at a specific position
            LinkedListNode<string> node = linkedList.Find("Banana");
            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>";
            // Remove an element from the linked list
            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 Renderer
            var renderer = new ChromePdfRenderer();
            // Create a PDF from HTML string
            var pdf = renderer.RenderHtmlAsPdf(content);
            // Save to a file or Stream
            pdf.SaveAs("AwesomeIronOutput.pdf");        
    }
}
Imports Microsoft.VisualBasic
Imports CsharpSamples
Public Class Program
	Public Shared Sub Main()
			Dim content = "<h1>Demonstrate IronPDF with C# LinkedList</h1>"
			content &= "<h2>Create a new linked list of strings</h2>"
			content &= "<p></p>"
			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>"
			' Print the elements of the linked list
			Console.WriteLine("Linked List elements:")
			For Each item In linkedList
				content &= $"<p>{item}</p>"
				Console.WriteLine(item)
			Next item
			content &= "<h2>Insert an element at a specific position</h2>"
			' Insert an element at a specific position
			Dim node As LinkedListNode(Of String) = linkedList.Find("Banana")
			linkedList.AddAfter(node, "Mango")
			content &= "<p>Find Banana and insert Mango After</p>"
			Console.WriteLine(vbLf & "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 item
			content &= "<h2>Remove an element from the linked list</h2>"
			' Remove an element from the linked list
			linkedList.Remove("Orange")
			content &= "<p>Remove Orange from linked list</p>"
			Console.WriteLine(vbLf & "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 item
			' create Renderer
			Dim renderer = New ChromePdfRenderer()
			' Create a PDF from HTML string
			Dim pdf = renderer.RenderHtmlAsPdf(content)
			' Save to a file or Stream
			pdf.SaveAs("AwesomeIronOutput.pdf")
	End Sub
End Class
VB   C#

Código Explicación

  1. En primer lugar, creamos el contenido del PDF mediante un objeto de cadena de contenido. El contenido se crea como una cadena HTML.
  2. Crear una nueva lista enlazada de cadenas con un nuevo LinkedList<string>().
  3. Añade elementos a la lista enlazada y también a la cadena de contenido del PDF.
  4. Imprime los elementos de la lista enlazada.
  5. Inserta un elemento en una posición específica utilizando el método AddAfter e imprime la lista de resultados.
  6. Elimina un elemento de la lista enlazada utilizando el método Remove e imprime la lista resultante.
  7. Por último, guarda la cadena de contenido HTML generada en un documento PDF utilizando los métodos ChromePdfRenderer, RenderHtmlAsPdf y SaveAs.

Salida

Lista enlazada en C# (Cómo funciona para desarrolladores): Figura 6 - IronPDF con salida `LinkedList

La salida tiene una marca de agua que puede eliminarse utilizando una licencia válida de la página de licencias.

Licencia IronPDF

IronPDF requiere una licencia para funcionar.

En la página página de licencia de prueba.

Pega la Clave en el archivo appSettings.json de abajo.

{
  "IronPdf.License.LicenseKey" = "The Key Goes Here"
}
{
  "IronPdf.License.LicenseKey" = "The Key Goes Here"
}
If True Then
  "IronPdf.License.LicenseKey" = "The Key Goes Here"
End If
VB   C#

Conclusión

C# LinkedList proporciona una estructura de datos versátil para la gestión de colecciones de elementos, ofreciendo inserciones y eliminaciones eficientes a la vez que acomoda el redimensionamiento dinámico de forma similar a la función hash por defecto. Las listas enlazadas se utilizan habitualmente en diversas aplicaciones y algoritmos, como la implementación de pilas, colas, tablas de símbolos y sistemas de gestión de memoria. Comprender las características y operaciones de las listas enlazadas es esencial para construir soluciones de software eficientes y escalables.

En resumen, aunque las listas enlazadas destacan en determinados escenarios, como las estructuras de datos dinámicas y las inserciones/eliminaciones frecuentes, puede que no sean la mejor opción para aplicaciones que requieran accesos aleatorios frecuentes o que se enfrenten a entornos con limitaciones de memoria. Un examen minucioso de los requisitos y características específicos de los datos puede orientar la selección de la estructura de datos más adecuada para la tarea en cuestión.

La librería IronPDF de Iron Software para leer y generar documentos PDF, ayuda a los desarrolladores a adquirir conocimientos avanzados para desarrollar aplicaciones modernas.

< ANTERIOR
C# Reverse String (Cómo funciona para desarrolladores)
SIGUIENTE >
C# iList (Cómo funciona para desarrolladores)

¿Listo para empezar? Versión: 2024.8 acaba de salir

Descarga gratuita de NuGet Descargas totales: 10,439,034 Ver licencias >