Estruturas de Dados em .NET – Fila e Pilha

Junto com algoritmos, estruturas de dados são um tema fundamental para a formação de qualquer desenvolvedor, independente da linguagem.

Nessa série, vou discutir algumas estruturas de dados, e mostrar as implementações disponibilizadas em .NET e seu uso de maneira prática.

Mas antes de começarmos com tudo, peço para que leia bem o tópico a seguir. Pode ser útil!


O que muitos desenvolvedores pensam de algoritmos e estruturas de dados

Já escutei muitos desenvolvedores perguntando: porque tenho que estudar todas essas coisas complicadas? Eu nunca vou utilizá-las no mundo real! Pode não ser o seu caso, mas arrisco dizer que as chances são grandes de que você tenha escutado algo desse tipo na universidade ou ambiente de trabalho.

É muito comum desenvolvedores de todos os níveis evitarem estudar sobre algoritmos e estruturas de dados, já que eles são muito complicados e não vão usar em seus trabalhos. Mas a grande questão é, utilizamos eles em nosso dia a dia, mesmo sem notar.

Um grande exemplo é o de busca em uma agenda telefônica física. Temos o nome da empresa, e então buscamos já a partir do meio da agenda. Se na página atual tiver empresas começando com letra maior do que o que buscamos, devemos buscar na parte anterior. Se não, buscamos na parte posterior da agenda. Essa pessoa acabou de usar o algoritmo de busca binária (Binary Search) sem nem saber!

Além desse exemplo, existem muitos outros que usamos no dia a dia e que mostram que ter essas habilidades não são úteis somente em uma entrevista de emprego. Eles ajudam a resolver problemas do mundo real.

Comecei com isso porque é um tema que gosto, mas que noto que muitos desenvolvedores negligenciam. Mas tem uma razão pela qual se recomenda se começar os estudos em programação por algoritmos e estruturas de dados. E eu já vi muitos exemplos de pessoas que não conseguiam resolver problemas simples de lógica em código por não conhecerem algoritmos ou estruturas de dados adequados para o problema em mãos.


O que são estruturas de dados?

Estruturas de dados oferecem uma maneira específica de se armazenar e organizar dados em um computador. Através do seu uso é possível resolver problemas do mundo real, como:

  • Gerenciar uma fila de atendimento
  • Defazer a última alteração em um artigo

Esses problemas podem ser resolvidos com estruturas de dados, como as a seguir:

  • Fila
  • Pilha

Vou detalhar cada uma delas e mostrar um exemplo real de seu uso com C# e .NET.


Fila

Uma fila implementa uma ordenação de tipo FIFO (First-In, First-Out), onde o primeiro valor adicionado será o primeiro a ser removido. Basicamente, é a mesma coisa que no mundo real! Os primeiros que chegam para serem atendidos, serão atendidos primeiro, por exemplo. Em .NET, a classe que implementa essa estrutura de dados é a Queue e Queue<T>.

Operações

As principais operações de uma fila são:

  • Enqueue: realiza a inserção de um valor.
  • Peek: retorna o próximo valor, mas não remove.
  • Dequeue: retorna o próximo valor, e remove.

Exemplo

Abaixo eu mostro um exemplo de seu uso. A idéia é permitir gerenciar senhas geradas para fila de atendimento

Com a classe que utiliza a estrutura de dados fila para armazenar as senhas geradas para atendimento.

Após executar o código, o resultado é mostrado logo abaixo.


Pilha

Uma pilha implementa uma ordenação de tipo LIFO (Last-In, First-Out), onde o último valor adicionado será o primeiro a ser removido. Um exemplo do mundo real é o de pilha de pratos para lavar, onde o que estiver no topo (último empilhado) será o primeiro a ser lavado. Em .NET, a classe que implementa essa estrutura de dados é a Stack e Stack<T>.

Operações

  • Push: realiza a inserção de um valor.
  • Peek: retorna o próximo valor, mas não o remove da pilha.
  • Pop: retorna o próximo valor e remove da pilha.

Exemplo

Abaixo eu mostro um exemplo de seu uso. A idéia é permitir desfazer as alterações feitas em um artigo de blog.

Com a classe que utiliza a estrutura de dados pilha para armazenar as alterações de algum contexto, basta no contexto que preferir.

Após executar o código, o resultado é mostrado logo abaixo.


Inscreva-se na lista de espera do Método .NET Direto ao Ponto, um treinamento completo sobre C#, APIs com ASP.NET Core e Microsserviços:  Inscreva-se aqui.

São quase 200 vídeo-aulas sobre temas como C#, ASP NET Core 5, EF Core, CQRS, Clean Architecture, Autenticação e autorização com JWT, Testes Unitários, além de mini-cursos em Microsserviços, Performance em .NET, ASP NET Core e Azure, Docker, Carreira Internacional em .NET, e mais.


Conclusão

Foi abordado neste artigo a importância do estudo de algoritmos e estruturas de dados, além de apresentadas duas estruturas de dados: fila e pilha. Para cada uma foram apresentados os principais conceitos, e um exemplo prático de seu uso com a plataforma .NET e C#.