Algoritmos e estruturas de dados em C#: guia prático

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Algoritmos e estruturas de dados em C#: da teoria à prática



Compreender algoritmos e estruturas de dados é a base do desenvolvimento profissional em C#. Independentemente de você estar escrevendo uma aplicação web de alta carga em ASP.NET Core ou uma aplicação desktop em WPF, a escolha da estrutura de dados correta e do algoritmo eficiente impacta diretamente o desempenho, a legibilidade e a escalabilidade do código. Neste artigo, vamos analisar as principais estruturas de dados e algoritmos com exemplos concretos de código C# que você poderá aplicar imediatamente em seus projetos.



1. Pilha (Stack) e Fila (Queue) em C#



Pilha (LIFO — Last In, First Out) e fila (FIFO — First In, First Out) são estruturas de dados básicas que estão integradas ao .NET e são amplamente utilizadas em tarefas reais: desde o processamento de chamadas de métodos até o gerenciamento de tarefas.



Pilha em C#

A pilha é frequentemente usada para implementar "desfazer" ações (undo) ou análise sintática. Em C#, a pilha é representada pela classe Stack<T>.

using System;using System.Collections.Generic;

public class StackExample{ public static void Main() { Stack<string> browserHistory = new Stack<string>(); // Adicionando elementos (Push) browserHistory.Push("Página inicial"); browserHistory.Push("Notícias"); browserHistory.Push("Artigo sobre C#"); Console.WriteLine($"Última página: {browserHistory.Peek()}"); // Artigo sobre C# // Removendo e retornando o elemento do topo (Pop) string lastPage = browserHistory.Pop(); Console.WriteLine($"Voltando de: {lastPage}"); // Artigo sobre C# Console.WriteLine($"Página atual: {browserHistory.Peek()}"); // Notícias }}


Fila em C#

A fila é ideal para processar tarefas na ordem em que chegam (por exemplo, fila de impressão ou processamento de mensagens). Use a classe Queue<T>.

using System;using System.Collections.Generic;

public class QueueExample{ public static void Main() { Queue<string> printQueue = new Queue<string>(); // Adicionando ao final da fila (Enqueue) printQueue.Enqueue("Documento1.pdf"); printQueue.Enqueue("Foto.png"); printQueue.Enqueue("Relatorio.docx"); Console.WriteLine($"Primeiro a ser impresso: {printQueue.Peek()}"); // Documento1.pdf // Removendo do início da fila (Dequeue) string firstJob = printQueue.Dequeue(); Console.WriteLine($"Imprimindo: {firstJob}"); // Documento1.pdf Console.WriteLine($"Próximo: {printQueue.Peek()}"); // Foto.png }}


Importante: No .NET também existe ConcurrentQueue<T> para cenários multithread e Stack<T> não suporta acesso por índice — apenas o topo.



2. Ordenação de array: Ordenação rápida (QuickSort)



Embora o C# tenha o método embutido Array.Sort(), entender algoritmos de ordenação é necessário para entrevistas e otimização. A Ordenação rápida é um dos algoritmos mais eficientes, com complexidade O(n log n) no caso médio.



using System;

public class QuickSortExample{ public static void QuickSort(int[] arr, int left, int right) { if (left < right) { int pivotIndex = Partition(arr, left, right); QuickSort(arr, left, pivotIndex - 1); QuickSort(arr, pivotIndex + 1, right); } }

private static int Partition(int[] arr, int left, int right) { int pivot = arr[right]; // elemento pivô — o último int i = left - 1;

for (int j = left; j < right; j++) { if (arr[j] < pivot) { i++;

Blogs

Book Recommendations