Algoritmos y estructuras de datos en C#: guía práctica con ejemplos

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Algoritmos y estructuras de datos en C#: en la práctica

\n\n

Comprender los algoritmos y las estructuras de datos es una habilidad fundamental para cualquier desarrollador. Ya sea que escribas un servicio de alta carga, una aplicación de escritorio o un juego, la gestión eficiente de los datos afecta directamente el rendimiento y la escalabilidad de tu código. En este artículo, analizaremos las estructuras de datos y algoritmos clave en el lenguaje C# (.NET) con ejemplos prácticos que podrás aplicar de inmediato en tus proyectos.

\n\n

1. Arreglos dinámicos y trabajo con List<T>

\n\n

En C#, el arreglo dinámico básico es la clase List<T>. A diferencia del arreglo clásico, se expande automáticamente al agregar elementos. Veamos sus operaciones clave y una de las más importantes: la búsqueda binaria.

\n\n

Búsqueda binaria (Binary Search) solo funciona en datos ordenados. Su complejidad es O(log n). El algoritmo divide el rango de búsqueda por la mitad en cada paso.

\n\n
using System;\nusing System.Collections.Generic;\n\npublic class BinarySearchExample\n{\n    public static int BinarySearch(List<int> sortedList, int target)\n    {\n        int left = 0;\n        int right = sortedList.Count - 1;\n\n        while (left <= right)\n        {\n            int mid = left + (right - left) / 2;\n\n            if (sortedList[mid] == target)\n                return mid; // Elemento encontrado, devuelve el índice\n            else if (sortedList[mid] < target)\n                left = mid + 1; // Buscar en la mitad derecha\n            else\n                right = mid - 1; // Buscar en la mitad izquierda\n        }\n        return -1; // Elemento no encontrado\n    }\n\n    public static void Main()\n    {\n        var numbers = new List<int> { 2, 5, 8, 12, 16, 23, 38, 45, 56, 67 };\n        int target = 23;\n        int result = BinarySearch(numbers, target);\n        Console.WriteLine(result != -1 ? $"Elemento {target} encontrado en el índice {result}" : "Elemento no encontrado");\n    }\n}
\n\n

¿Por qué es importante? List<T> se usa en el 90% de los proyectos. Saber buscar datos rápidamente en él es clave para el rendimiento.

\n\n

2. Pila y Cola: LIFO y FIFO en la práctica

\n\n

La pila (Stack) y la cola (Queue) son colecciones con un orden de acceso claramente definido. Son indispensables para procesar llamadas, análisis sintáctico y trabajar con tareas.

\n\n

Pila (LIFO — Last In, First Out)

\n

Se utiliza, por ejemplo, para verificar la corrección de los paréntesis en el código.

\n\n
using System;\nusing System.Collections.Generic;\n\npublic class StackExample\n{\n    public static bool IsValidBrackets(string input)\n    {\n        Stack<char> stack = new Stack<char>();\n        foreach (char ch in input)\n        {\n            if (ch == '(' || ch == '{' || ch == '[')\n            {\n                stack.Push(ch);\n            }\n            else if (ch == ')' || ch == '}' || ch == ']')\n            {\n                if (stack.Count == 0) return false;\n\n                char top = stack.Pop();\n                if ((ch == ')' && top != '(') ||\n                    (ch == '}' && top != '{') ||\n                    (ch == ']' && top != '['))\n                {\n                    return false;\n                }\n            }\n        }\n        return stack.Count == 0;\n    }\n\n    public static void Main()\n    {\n        string test1 = "({[]})";\n        string test2 = "({[})";\n        Console.WriteLine($"'{test1}' — paréntesis correctos: {IsValidBrackets(test1)}");\n        Console.WriteLine($"'{test2}' — paréntesis correctos: {IsValidBrackets(test2)}");\n    }\n}
\n\n

Cola (FIFO — First In, First Out)

\n

Ideal para procesar tareas en el orden en que llegan (por ejemplo, cola de impresión).

\n\n
using System;\nusing System.Collections.Generic;\n\npublic class QueueExample\n{\n    public static void Main()\n    {\n                

Blogs

Book Recommendations