AYUDA .NET

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

Actualizado 6 de junio, 2024
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 IronPDF una 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()
        {
            //  Crear una nueva lista enlazada de enteros
            LinkedList<int> linkedList = new LinkedList<int>();
            //  Añadir elementos a la lista enlazada que crean objetos de clase nodo
            linkedList.AddLast(10);
            linkedList.AddLast(20);
            linkedList.AddLast(30);
            linkedList.AddLast(40);
            //  Recorrer e imprimir los elementos de la lista enlazada
            Console.WriteLine("Traverse Linked List elements:");
            foreach (var item in linkedList)
            {
                Console.WriteLine(item);
            }
            Console.WriteLine($"Number of Linked List elements:{linkedList.Count}"); //  utilizar la propiedad count para mostrar la longitud
            //  Buscar un elemento en una lista enlazada
            Console.WriteLine("\nFind/Search Element Linked List elements: 30");
            var foundNode = linkedList.Find(30);//  devuelve el nodo
            Console.WriteLine($"Found Value:{foundNode.Value}, Next Element:{foundNode.Next.Value}, Previous Element:{foundNode.Previous.Value}"); //  imprime nodo siguiente, nodo anterior
            //  Insertar un elemento en un nodo especificado
            LinkedListNode<int> current = linkedList.Find(20);
            linkedList.AddAfter(current, 25);
            Console.WriteLine($"\nNumber of Linked List elements:{linkedList.Count}"); //  utilizar la propiedad count para mostrar la longitud
            Console.WriteLine("\nLinked List elements after insertion:");
            foreach (var item in linkedList)
            {
                Console.WriteLine(item);
            }
            //  Eliminar un nodo existente de la lista enlazada 
            linkedList.Remove(30); //  eliminar el nodo actual
            Console.WriteLine("\nLinked List elements after removal:");
            foreach (var item in linkedList)
            {
                Console.WriteLine(item);
            }
            Console.WriteLine($"\nNumber of Linked List elements:{linkedList.Count}"); //  utilizar la propiedad count para mostrar la longitud
        }
    }
}
namespace CsharpSamples
{
public class Program
{
    public static void Main()
        {
            //  Crear una nueva lista enlazada de enteros
            LinkedList<int> linkedList = new LinkedList<int>();
            //  Añadir elementos a la lista enlazada que crean objetos de clase nodo
            linkedList.AddLast(10);
            linkedList.AddLast(20);
            linkedList.AddLast(30);
            linkedList.AddLast(40);
            //  Recorrer e imprimir los elementos de la lista enlazada
            Console.WriteLine("Traverse Linked List elements:");
            foreach (var item in linkedList)
            {
                Console.WriteLine(item);
            }
            Console.WriteLine($"Number of Linked List elements:{linkedList.Count}"); //  utilizar la propiedad count para mostrar la longitud
            //  Buscar un elemento en una lista enlazada
            Console.WriteLine("\nFind/Search Element Linked List elements: 30");
            var foundNode = linkedList.Find(30);//  devuelve el nodo
            Console.WriteLine($"Found Value:{foundNode.Value}, Next Element:{foundNode.Next.Value}, Previous Element:{foundNode.Previous.Value}"); //  imprime nodo siguiente, nodo anterior
            //  Insertar un elemento en un nodo especificado
            LinkedListNode<int> current = linkedList.Find(20);
            linkedList.AddAfter(current, 25);
            Console.WriteLine($"\nNumber of Linked List elements:{linkedList.Count}"); //  utilizar la propiedad count para mostrar la longitud
            Console.WriteLine("\nLinked List elements after insertion:");
            foreach (var item in linkedList)
            {
                Console.WriteLine(item);
            }
            //  Eliminar un nodo existente de la lista enlazada 
            linkedList.Remove(30); //  eliminar el nodo actual
            Console.WriteLine("\nLinked List elements after removal:");
            foreach (var item in linkedList)
            {
                Console.WriteLine(item);
            }
            Console.WriteLine($"\nNumber of Linked List elements:{linkedList.Count}"); //  utilizar la propiedad count para mostrar la longitud
        }
    }
}
Imports Microsoft.VisualBasic

Namespace CsharpSamples
Public Class Program
	Public Shared Sub Main()
			'  Crear una nueva lista enlazada de enteros
			Dim linkedList As New LinkedList(Of Integer)()
			'  Añadir elementos a la lista enlazada que crean objetos de clase nodo
			linkedList.AddLast(10)
			linkedList.AddLast(20)
			linkedList.AddLast(30)
			linkedList.AddLast(40)
			'  Recorrer e imprimir los elementos de la lista enlazada
			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}") '  utilizar la propiedad count para mostrar la longitud
			'  Buscar un elemento en una lista enlazada
			Console.WriteLine(vbLf & "Find/Search Element Linked List elements: 30")
			Dim foundNode = linkedList.Find(30) '  devuelve el nodo
			Console.WriteLine($"Found Value:{foundNode.Value}, Next Element:{foundNode.Next.Value}, Previous Element:{foundNode.Previous.Value}") '  imprime nodo siguiente, nodo anterior
			'  Insertar un elemento en un nodo especificado
			Dim current As LinkedListNode(Of Integer) = linkedList.Find(20)
			linkedList.AddAfter(current, 25)
			Console.WriteLine($vbLf & "Number of Linked List elements:{linkedList.Count}") '  utilizar la propiedad count para mostrar la longitud
			Console.WriteLine(vbLf & "Linked List elements after insertion:")
			For Each item In linkedList
				Console.WriteLine(item)
			Next item
			'  Eliminar un nodo existente de la lista enlazada 
			linkedList.Remove(30) '  eliminar el nodo actual
			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}") '  utilizar la propiedad count para mostrar la longitud
	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>";
            //  Crear una nueva lista enlazada de cadenas
            LinkedList<string> linkedList = new LinkedList<string>();
            //  Añadir elementos a la lista enlazada
            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>";
            //  Imprimir los elementos de la lista enlazada
            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>";
            //  Insertar un elemento en una posición determinada
            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>";
            //  Eliminar un elemento de la lista enlazada
            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);
            }
            //  Crear renderizador
            var renderer = new ChromePdfRenderer();
            //  Crear un PDF a partir de una cadena HTML
            var pdf = renderer.RenderHtmlAsPdf(content);
            //  Guardar en un archivo o 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>";
            //  Crear una nueva lista enlazada de cadenas
            LinkedList<string> linkedList = new LinkedList<string>();
            //  Añadir elementos a la lista enlazada
            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>";
            //  Imprimir los elementos de la lista enlazada
            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>";
            //  Insertar un elemento en una posición determinada
            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>";
            //  Eliminar un elemento de la lista enlazada
            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);
            }
            //  Crear renderizador
            var renderer = new ChromePdfRenderer();
            //  Crear un PDF a partir de una cadena HTML
            var pdf = renderer.RenderHtmlAsPdf(content);
            //  Guardar en un archivo o 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>"
			'  Crear una nueva lista enlazada de cadenas
			Dim linkedList As New LinkedList(Of String)()
			'  Añadir elementos a la lista enlazada
			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>"
			'  Imprimir los elementos de la lista enlazada
			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>"
			'  Insertar un elemento en una posición determinada
			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>"
			'  Eliminar un elemento de la lista enlazada
			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
			'  Crear renderizador
			Dim renderer = New ChromePdfRenderer()
			'  Crear un PDF a partir de una cadena HTML
			Dim pdf = renderer.RenderHtmlAsPdf(content)
			'  Guardar en un archivo o 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.7 recién publicada

Descarga gratuita de NuGet Descargas totales: 9,848,088 Ver licencias >
123