
Estrutura de dados é uma coleção de valores discretos ou contínuos que transmitem informações, quantidade, qualidade, fatos e estatísticas, que através de algoritmos geram informações.
- Visa eficiência na organização, gerenciamento, armazenamento, processamento e apresentação de dados e informações.
- Organiza valores, relações entre valores, funções ou operações aplicadas a cada célula da estrutura.
- Estrutura de dados na ciência da computação é um formato de organização dos dados.
- Existem vários tipos de estruturas de dadoslistas, pilhas, filas, matrizes, árvores e grafos.
- Cada estutura tem vantagens e desvantagens na perspeciva dos algoritmos atrelados que as processam.
- Todas essas estruturas são massivamente estudadas hoje em dia nos cursos de graduação de ciência da computação.
- Vale analisar e compreender o ganho cognitivo que podemos obter sabendo usar de forma mais inteligente (algoritmica) essas “estruturas mentais”.
- A pergunta é, quais os contextos, situções e aplicações que uma estrutura é melhor do que outra ou como ela nos ajuda a aumentar a nossa cognição?
Exemplos de Estruturas.
Lista … (n1, n2, n3, ….nk)
- Estrutura abstrata linear de elementos de dados.
- Heterogênea , … admite vários tipos ou naturezas de dados.
- É usada para representar redes de conjuntos de nós interconectados.
- A cada elemento da lista ( nó ou vértice), está associado um conjunto de dados e metadados.
- Cada elemento da lista aponta para outro elemento, formando uma cadeia, de fácil inserção e retirada de valores.
- Listas são muito usadas para gestão de escopo, não aconselhável para algoritmos ou aplicações com um grande volume de dados.
- Exemplos de listas são os check lists nos seus vários formatos.
- É uma organização de dados através da enumeração para melhor visualização da informação.
- Facilitar a aquisição, memorização e recuperação de informações numa estrutura dinâmica e elástica.
- E diferente ou está em oposição aos vetores ou matrizes, que são estruturas de dados estáticas.
- Assim, uma lista pode ter virtualmente infinitos elementos.
- Numa lista encadeada existem dois campos, um reservado para colocar o dado a ser armazenado e outro para apontar para o próximo elemento da lista (que podem ser vários).
Matriz (array ) … coleção não linear de elementos de dados aij, em formato tabular de i linhas e j colunas, índices usados para localizar e acessar qualquer forma célula de forma direta e não sequencial.
Estrutura de dados é uma abstração.
São formas ou formatos de representação de dados que podem ser quantitativos e/ou qualitativos para aumentar o desempenho do processamento e apresentação da informação, compreensão e aprendizagem.
É um componente linguagem, especificamente da sua sintaxe, que cuida das relações de concordãncia, subordinação e ordem dos argumentos (raciocínio) e enunciados (sumário, explicação).
Está no núcleio do sistema cognitivo humano, computacional e inteligência arA estrutura tificial.
A estrutura de dados que usamos, pensamos ou criamos espelha o modelo de pensamento ou algoritmo que usamos e influi diretamento no desempenho e compreensão da solução de problemas e tomas de decisões.
Afeta todas as funções cognitivas básicas como – atenção, percepção, pensamento, memória, linguagem, aprendizagem.
Todas as funções cognitivas e algoritmos comútacionais são afetadas e modelados e apresentam desempenho diferente para diferentes estruturas de dados ou modelagens mentasi que fazemos.
Um problema difícímo pode ser tornar bem mais ácil com a mudança da estrutura e linguagem da formulação e resolução adotadas.
iretamente o comportamento de pessoas e computadores.
O estudo,
Quando nos deparamos com uma estrutura de dados conhecida automaticamente adequamos o nosso pensamento, percepção e comportamento ao aobjeto do conhecimento.
É assim quando nos deparamos com várias diferentes estruturas de dados e informação como texto, tabela, mapa, check list,
Qual a diferença cognitiva?
Como podemos explorar esse entendimento e gerar vantagem copetitiva, agregar valor na interação com o objeto de cponhecimento e outros sujeitos.
Da mesma forma se comporta algoritmos computacionais. São dependentes de estruturas pré-concebidas.
O algoritmo computacional e o mental trabalham em função da estrutura do objeto de conhecimento e a estrutura de conhecimento em em função do algoritmo (ou sujeito).
O texto é um conjunto de palavras escritas comunicação humana , emocional, subjetiva
A variável é um componente matemático ou símbolo que representa um número arbitrário, quando passa por diferentes estados de grandeza.
Não existe uma estrutura melhor do que outra.
Cada um desses modelos, formatos de dados, estão fundamentados métodos, ferramentas técnicas, habilidadesformatos pressupõe um tipo de pensamento, uma forma algoritmica de pensar, formular problemas, soluções, monitorar, analisar
Matriz

Uma tabela de m linhas com n colunas.
Ordem específica.
Cada elemento da matriz (célula) pode ser ou não do mesmo tipo.
Os elementos são acessados por índices.
Podem ser de comprimento fixo ou redimensionável.
É um conjunto de vetores (matrizes de uma dimensão).
As matrizes são mais do que objetos estáticos, que gravam informações e dados.
Matrizes representam funções que agem em vetores transformando-os em outros vetores (tal como explora o aplicativo Excel).
Existem várias tipos de matrizes e várias operações entre matrizes, que permitem modelar e simular sistemas representados por matrizes.
Aplicações da Matriz

Matrizes são encontradas em todos os campos científicos.
Na teoria da probabilidade e estatística, matrizes estocásticas são usadas para descrever os conjuntos de probabilidades de eventos.
Em computação, as matrizes são usadas em algoritmos de rankeamento de páginas
Podem ser usadas para modelar sistemas estocáticos, crescimento populacional, grafos, etc.
Representar um conjunto de variáveis aleatórias, com a propriedade de que a distribuição de probabilidade do próximo estado depende apenas do estado atual e não da sequência de eventos.
A definição dessa propriedade, também chamada de memória markoviana, é que os estados anteriores são irrelevantes para a predição dos estados seguintes, desde que o estado atual seja conhecido.
Essa propriedade Cadeias de Markov têm muitas aplicações como modelos estatísticos de processos do mundo real.
Lista Vinculada
Arvore

- É uma estrutura de dados não linear, que descreve conexões (relacionamentos) de elementos (nós) de forma hieráquica (pai e filho).
- Não existe círculos ou loops, ou seja, nenhum nó pode ser seu próprio ancestral.
- É eficiente coputacionalmente.
- Fácil de representar e processar.
- Modela muitos problemas reais..
- Exemplos … processos, procedimentos, atividades, árvores genealógicas, algoritmos, estrutura de arquivo ou pastas, interfaces gráficas, banco de dados, sites na internet, etc, usam a estrutura de árvore.
- Uma árvore pode ser simplificadamente descrita como formada por nós raíz, ramos e folhas.
- É uma estrutura que facilita a recursividade.
- Árvores podem ser repreentadas por outras estruturas, tal como grafos, conjuntos e listas.
- Arvores binárias são muito usadas … onde um nó pai pode ter no máximo dois filhos.
Aplicações das Árvores
A estrutura de árvores é aplicada para organizar dados em várias situações e algoritmos.
- Mapear relações entre coisas, todo, parte, componente, subcomponente.
- Descrever sistemas de arquivo, estruturas de diretório.
- Definir sintaxe de linguagens de computador ou artificiais.
- Servir de modelo para processar linguagem natural.
- Modelar linguagens digitais.
- Servir de árvore de estrutura de dados de pesquisa.
- Computação gráfica.
- Estruturar e acessar banco de dados
- Aninhar conjuntos e hierarquias.
- Taxonomizar, categorizar e classificar
- Memorizar.
- Representar estruturas e hierarquias matemáticas.
- Definir ou pesquisar caminhos ou rotas num grafo.
- Posicionar e acionar subrotinas.
- Descrever roteiros e scripts.
- etc.
Indicadores e Operações em Árvore.
As árvores podem ser parametrizadas e gerar vários tipos de operações e indicadores.
- Tamanho da árvore … número de nós na árvore.
- Altura … distância mais longa do dó a uma folha.
- Profundidade … nível do nó, distância do nó a raiz.
- Vizinho … pai ou filho.
- Antecessor … nó acessível de filho para pai.
- Descendente … nó acessível pai para filho.
- Grau … número de filhos do nó.
- Gráu da árvore … grau máximo de um nó na árvore.
- Distância … número de arestas do caminho mais curto entre dois nós.
- Largura … número de nós em um nível.
- Folhagem … número de folhas.
- Floresta … conjunto de uma ou mais árvores disjuntas.
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 :
- D: Conjunto de domínio;
- F: o conjunto de operações
- 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:
- Estrutura de dados linear
Os elementos são organizados em uma dimensão, também conhecida como dimensão linear.
Exemplo: listas, pilha, fila, etc.
- Estrutura de dados não linear
Os elementos são organizados em dimensões um-muitos, muitos-um e muitos-muitos.
Exemplo: árvore, gráfico, tabela, etc.
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:
- Initialize : Torna uma pilha vazia.
- Push: Adiciona um item na pilha. Se a pilha estiver cheia, diz-se que é uma condição de estouro;
- Pop: Remove um item da pilha. Os itens são exibidos na ordem inversa em que são enviados. Se a pilha estiver vazia, diz-se que é uma condição de Underflow;
- Peek ou Top: Retorna o elemento superior da pilha;
- isEmpty: Retorna true se a pilha estiver vazia, caso contrário, false;
Aplicações e usos do recurso Stack:
- Funcionalidade desfazer/refazer(Undo)
- Inversão de palavras;
- Empilhar para trás/frente em navegadores
- Algoritmos de retrocesso;
- Verificação de colchetes;
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 :
- Enqueue: Adiciona um item à fila. Se a fila estiver cheia, diz-se que é uma condição de estouro;
- Dequeue: Remove um item da fila. Os itens são exibidos na mesma ordem em que são enviados. Se a fila estiver vazia, diz-se que é uma condição de Underflow;
- Front: Pegue o item da frente da fila;
- Rear: Pegue o último item da 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>.