C# - Estrutura de dados - I
 Veremos hoje uma introdução a estrutura de dados na linguagem C#.


Uma estrutura de dados é um formato especializado para organizar, processar, recuperar e armazenar dados. Existem vários tipos básicos e avançados de estruturas de dados, todos projetados para organizar os dados para atender a uma finalidade específica.

 


 


 

As estrutura de dados facilitam o acesso e o trabalho dos usuários aos dados de que precisam de maneira apropriada; Como exemplos de estruturas de dados temos:  arrays, Linked List, Stack, Queue, etc.
 

A escolha de uma boa estrutura de dados torna possível realizar uma variedade de operações críticas de forma eficaz, e, uma estrutura de dados eficiente também usa espaço mínimo de memória e tempo de execução para processar a estrutura.


Uma estrutura de dados também define uma instância de ADT (ABSTRACT DATA TYPE) que é formalmente definido como um trio:   [D,F,A], onde :

  1. D: Conjunto de domínio;

  2. F:  o conjunto de operações

  3. A: o conjunto de axiomas;

A necessidade das estrutura de dados

A estrutura dos dados e a síntese do algoritmo são relativas entre si. A apresentação dos dados deve ser de fácil compreensão para que o desenvolvedor, assim como o usuário, possa fazer uma implementação eficiente da operação.

As estruturas de dados fornecem uma maneira fácil de organizar, recuperar, gerenciar e armazenar dados.

Os principais motivos para usar estrutura de dados:

- A modificação da estrutura de dados é fácil;
- Requer menos tempo;
- Economizar espaço de memória de armazenamento;
- A representação de dados é fácil;
 

A classificação e os tipos de Estruturas de Dados
 



Podemos ter:

A importância da complexidade dos algoritmos é dada pelo fato de que ela nos diz se o código está escalável. A maioria das estruturas de dados e algoritmos fundamentais já estão implementados na plataforma .NET, é importante saber como essas estruturas de dados funcionam e qual o tempo, complexidade de memória que elas possuem para as operações
básicas: elemento de acesso, elemento de busca, elemento de exclusão, elemento de adição.

 

 

A seguir veremos as estrutura de dados mais populares na plataforma .NET.

 

1- Stack

 

Stack ou Pilha é uma estrutura de dados implementada de duas maneiras, pilha simples no namespace System.Collections e pilha como estrutura de dados genérica no namespace System.Collections.Generic, o princípio da operação da estrutura da pilha é LIFO (último a entrar, primeiro a sair) ), o último elemento inserido é o primeiro que sai.

 

 

Stack ou Pilha é uma estrutura de dados linear que segue uma ordem particular na qual as operações são executadas. A ordem pode ser LIFO (Last In First Out) ou FILO (First In Last Out). Na pilha, todas as inserções e exclusões são permitidas em apenas uma extremidade da lista.

 

Exemplo de uma Stack bem simples :

 

using System.Collections;
// Cria e inicializa uma nova Stack.
    Stack minhaStack = new Stack();
    minhaStack.Push("Macoratti");
    minhaStack.Push(".net");
    minhaStack.Push(" 2022");
    // Exibe as propriedades e valores das  Stack.
    Console.WriteLine("minhaStack\n");
    Console.WriteLine($"\tQuantidade :\t {minhaStack.Count}");
    Console.Write("\tValores: ");
    foreach (Object obj in minhaStack)
        Console.Write($"\t{obj}");

Usando a coleção System.Collections.Generic podemos fazer assim:

Stack<string> numeros = new Stack<string>();
    numeros.Push("um");
    numeros.Push("dois");
    numeros.Push("três");
    numeros.Push("quatro");
    numeros.Push("cinco");
    foreach (string numero in numeros)
    {
        Console.WriteLine(numero);
    }

 

As operações básicas a seguir são executadas na pilha:

Aplicações e usos do recurso Stack:

2. Queue

 

Assim como a Pilha, a Fila é uma estrutura linear que segue uma ordem específica na qual as operações são executadas. A ordem é First In First Out (FIFO).

Na fila, os itens são inseridos em uma extremidade e excluídos na outra extremidade. Um bom exemplo de fila é qualquer fila de consumidores para um recurso em que o consumidor que veio primeiro é atendido primeiro. A diferença entre pilhas e filas está na remoção.

 

Em uma pilha, removemos o item adicionado mais recentemente; em uma fila, removemos o item adicionado menos recente.

 

Exemplo de implementação usando uma fila simples usando o namespace System.Collections:

 

Queue minhaFila = new Queue();
    minhaFila.Enqueue("Macoratti");
    minhaFila.Enqueue(".net");
    minhaFila.Enqueue(" 2022");
    Console.WriteLine("minhaFila\n");
    Console.WriteLine($"\tQuantidade :\t {minhaFila.Count}");
    Console.Write("\tValores: ");
    foreach (Object obj in minhaFila)
        Console.Write($"\t{obj}");

 

Principais operações realizadas em uma Queue ou Fila :

3. LinkedList

 

Assim como os arrays, a Linked List(lista encadeada) é uma estrutura de dados linear. Ao contrário dos arrays, os elementos da lista encadeada não são armazenados em um local contíguo; os elementos são vinculados usando ponteiros.

 

O princípio de funcionamento das estruturas de lista encadeada é que cada nó da lista tem uma referência ao próximo nó, exceto a cauda da lista, que não tem referência ao próximo nó.

 

Exemplo de implementação simples:

 

 LinkedList<string> meses = new LinkedList<string>();
    meses.AddLast("Março");
    meses.AddFirst("Janeiro");
    var marco = meses.Find("Março");
    meses.AddBefore(marco, "Fevereiro");
    meses.AddAfter(marco, "Abril");
    var node = new LinkedListNode<string>("Maio");
    // Adiciona o node
    meses.AddLast(node);
    foreach (string mes in meses)
    {
        Console.WriteLine(mes);
    }

Se você precisa de uma estrutura de dados vinculada que permita adicionar e remover elementos com facilidade pode usar a classe genérica LinkedList<T>.

Para declarar uma lista vinculada, use o tipo genérico LinkedList<T>, em que T é o tipo de elemento.

Ao contrário dos outros tipos de coleção padrão, a lista vinculada não é apoiada por uma matriz. O tipo LinkedList <T> armazena valores em um tipo de wrapper chamado LinkedListNode<T>.

Cada nó na árvore fornece uma referência aos nós seguintes e anteriores, formando um link (portanto, lista vinculada) entre cada nó, em uma ordem linear. Essa estrutura torna essa lista bastante diferente para da List<T>.

Continuamos a abordar as demais estruturas de dados na próxima parte do artigo.  ... 

"Se alguém não estiver em mim, será lançado fora, como a vara, e secará; e os colhem e lançam no fogo, e ardem. Se vós estiverdes em mim, e as minhas palavras estiverem em vós, pedireis tudo o que quiserdes, e vos será feito."
João 15:6,7

Referências:


José Carlos Macoratti