Algorithmes et structures de données en C# : guide pratique avec exemples

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Algorithmes et structures de données en C# : en pratique

\n\n

La compréhension des algorithmes et des structures de données est une compétence fondamentale pour tout développeur. Que vous écriviez un service à forte charge, une application de bureau ou un jeu, une gestion efficace des données influence directement les performances et l'évolutivité de votre code. Dans cet article, nous analyserons les structures de données et algorithmes clés en langage C# (.NET) avec des exemples pratiques que vous pourrez immédiatement appliquer dans vos projets.

\n\n

1. Tableaux dynamiques et travail avec List<T>

\n\n

En C#, le tableau dynamique de base est la classe List<T>. Contrairement au tableau classique, il s'étend automatiquement lors de l'ajout d'éléments. Examinons ses opérations clés et l'une des plus importantes — la recherche binaire.

\n\n

Recherche binaire (Binary Search) fonctionne uniquement sur des données triées. Sa complexité est O(log n). L'algorithme divise la plage de recherche en deux à chaque étape.

\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; // Élément trouvé, retourne l'index\n            else if (sortedList[mid] < target)\n                left = mid + 1; // Cherche dans la moitié droite\n            else\n                right = mid - 1; // Cherche dans la moitié gauche\n        }\n        return -1; // Élément non trouvé\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 ? $"Élément {target} trouvé à l'index {result}" : "Élément non trouvé");\n    }\n}
\n\n

Pourquoi est-ce important ? List<T> est utilisé dans 90% des projets. Savoir rechercher rapidement des données dedans est la clé de la performance.

\n\n

2. Pile et File d'attente : LIFO et FIFO en pratique

\n\n

La pile (Stack) et la file d'attente (Queue) sont des collections avec un ordre d'accès clairement défini. Elles sont indispensables pour le traitement des appels, l'analyse syntaxique et le travail avec les tâches.

\n\n

Pile (LIFO — Last In, First Out)

\n

Utilisée par exemple pour vérifier la validité des parenthèses dans le code.

\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}' — parenthèses correctes : {IsValidBrackets(test1)}");\n        Console.WriteLine($"'{test2}' — parenthèses correctes : {IsValidBrackets(test2)}");\n    }\n}
\n\n

File d'attente (FIFO — First In, First Out)

\n

Idéale pour traiter les tâches dans l'ordre de leur arrivée (par exemple, file d'impression).

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

Blogs

Book Recommendations