DEV Community

Cover image for Estruturas de Dados: Conceitos e Implementações – Parte 1: Arrays
João Vitor
João Vitor

Posted on

Estruturas de Dados: Conceitos e Implementações – Parte 1: Arrays

Uma breve introdução

Assim como guardamos roupas em um guarda-roupa ou ferramentas em uma caixa apropriada, na programação também precisamos de formas específicas para armazenar e organizar diferentes tipos de dados. Essas formas são chamadas de estruturas de dados.

Cada estrutura é desenvolvida para resolver problemas específicos e organizar dados de maneira eficiente, seja em uma lista simples, uma fila de tarefas, ou um sistema complexo de busca.

Nessa serie de posts, vamos explorar as principais estruturas de dados, entender para que servem e como elas podem facilitar a vida de um programador.

Antes de começarmos, vale ressaltar que a linguagem utilizada nesta série de posts será o C#. Embora a sintaxe possa variar dependendo da linguagem de programação, o conceito central permanece o mesmo.

Arrays

Pense nas listas ou arrays como uma fila ordenada de informações. Em programação, os arrays guardam dados em uma sequência exata, onde cada item ocupa uma posição específica chamada de índice.

Arrays são estruturas de dados de tamanho fixo que armazenam elementos de mesmo tipo em posições sequenciais de memória.

Características principais:

  • Homogeneidade:
    Todos os elementos do array devem ser do mesmo tipo de dado (por exemplo, int, float, char), permitindo armazenamento eficiente e acesso rápido.

  • Tamanho fixo:
    O tamanho de um array é definido no momento de sua criação e não pode ser alterado. Para aumentar ou diminuir o número de elementos, seria necessário alocar uma nova região de memória e copiar os elementos, prática que é custosa.

  • Acesso direto:
    Arrays permitem acesso direto a qualquer elemento usando o índice, o que torna a complexidade de acesso 𝑂(1) (tempo constante). Os índices de um array sempre começam em 0, de forma obrigatória. Assim, o primeiro elemento de um array estará no índice 0, o segundo no índice 1, e assim sucessivamente.

  • Alocação contígua:
    A memória é alocada de forma contígua, o que significa que todos os elementos do array são armazenados adjacentes uns aos outros na memória. Isso permite otimização em operações de baixo nível.

Declaração e uso

A declaração padrão para um array obedece a seguinte estrutura:

array declaration

Então, por exemplo, um array de inteiros (int) com tamanho 10 seria declarado da seguinte forma:

Int array declaration

Manipulação dos Dados

Existem duas formas básicas de se inserirem dados em um Array

  1. No momento da sua declaração

Image description

No primeiro exemplo, temos uma declaração explícita de um array de inteiros com 5 posições. Se fossem especificados mais ou menos elementos entre as chaves do que o tamanho definido (5), ocorreria um erro de compilação.

Observe que, na segunda linha, não há uma declaração explícita do número de elementos que o array conterá. Ao definir implicitamente o tamanho do array, sua capacidade é determinada automaticamente pela quantidade de itens fornecidos na inicialização.

  1. Acessando os índices do array criado

Image description

Uma outra maneira de adicionar elementos a um array é utilizando os índices dos itens. No exemplo acima, declaramos um array de strings com tamanho 2. Em seguida, atribuímos valores às posições específicas do array: o elemento na posição de índice 0 recebe a string "Hello", enquanto o elemento na posição de índice 1 recebe a string "World".

Exibição dos dados

Assim como podemos definir um valor para um elemento de um array utilizando seu índice, ao acessarmos esse índice, obtemos o valor correspondente ao elemento armazenado nessa posição.

Data Acess

Tipos de Array

Os arrays podem ser classificados como unidimensionais ou multidimensionais. Arrays unidimensionais são simplesmente listas de elementos, enquanto arrays multidimensionais, frequentemente chamados de matrizes, são usados para representar tabelas ou estruturas de dados com mais de uma dimensão.

  1. Arrays Unidimensionais

Array unidimensional

  1. Arrays Multidimensionais

Array Multidimensional

Um array multidimensional pode ser descrito como um array de arrays. Esse tipo de array é útil quando precisamos guardar e exibir dados de uma forma tabular, como uma tabela, com linhas e colunas.

Importante Saber: Uma unicá vírgula[,] especifica que o array é bidimensional. Um array tridimensional teria duas vírgulas: int[,,], e assim sucessivamente.

Propriedades da Classe Array em C

Propriedade Descrição
IsReadOnly Retorna um booleano indicando se o Array é somente Leitura.
Length Retorna o número total de itens de um array em todas as dimensões.
Rank Retorna o número de dimensões de um array, então um array de duas dimensões retornaria 2, por exemplo.

Métodos da Classe Array em C

Método Descrição
AsReadOnly() Retorna um "wrapper" somente leitura para o array especificado.
BinarySearch() Pesquisa um Array unidimensional ordenado por um valor, utilizando o algoritmo de busca binária.
Clear() Define um intervalo de elementos em um array para o valor padrão de cada tipo de elemento.
Clone() Cria uma cópia superficial do Array.
ConstrainedCopy() Copia um intervalo de elementos de um Array a partir de um índice de origem especificado e os cola em outro Array a partir de um índice de destino especificado. Garante que todas as alterações sejam desfeitas se a cópia não for bem-sucedida.
ConvertAll() Converte um array de um tipo para um array de outro tipo.
Copy() Copia um intervalo de elementos de um Array para outro Array e realiza conversão de tipo e boxe conforme necessário.
CopyTo() Copia todos os elementos do array unidimensional atual para o array unidimensional especificado.
CreateInstance() Inicializa uma nova instância da classe Array.
Empty() Retorna um array vazio.
Equals() Determina se o objeto especificado é igual ao objeto atual.
Exists() Determina se o array especificado contém elementos que atendem às condições definidas pelo predicado especificado.
Find() Pesquisa um elemento que atenda às condições definidas pelo predicado especificado e retorna a primeira ocorrência dentro de todo o Array.
FindAll() Recupera todos os elementos que atendem às condições definidas pelo predicado especificado.
FindIndex() Pesquisa um elemento que atenda às condições definidas por um predicado especificado e retorna o índice baseado em zero da primeira ocorrência dentro de um Array ou de uma parte dele.
FindLast() Pesquisa um elemento que atenda às condições definidas pelo predicado especificado e retorna a última ocorrência dentro de todo o Array.
FindLastIndex() Pesquisa um elemento que atenda às condições definidas por um predicado especificado e retorna o índice baseado em zero da última ocorrência dentro de um Array ou de uma parte dele.
ForEach() Executa a ação especificada em cada elemento do array especificado.
GetEnumerator() Retorna um IEnumerator para o Array.
GetHashCode() Serve como a função de hash padrão.
GetLength() Obtém um inteiro de 32 bits que representa o número de elementos na dimensão especificada do Array.
GetLongLength() Obtém um inteiro de 64 bits que representa o número de elementos na dimensão especificada do Array.
GetLowerBound() Obtém o índice do primeiro elemento da dimensão especificada no array.
GetType() Obtém o Tipo da instância atual.
GetUpperBound() Obtém o índice do último elemento da dimensão especificada no array.
GetValue() Obtém o valor do elemento especificado no Array atual.
IndexOf() Pesquisa o objeto especificado e retorna o índice da sua primeira ocorrência em um array unidimensional ou em um intervalo de elementos no array.
Initialize() Inicializa cada elemento do Array do tipo valor chamando o construtor padrão do tipo valor.
LastIndexOf() Retorna o índice da última ocorrência de um valor em um Array unidimensional ou em uma parte do Array.
MemberwiseClone() Cria uma cópia superficial do objeto atual.
Resize() Altera o número de elementos de um array unidimensional para o novo tamanho especificado.
Reverse() Inverte a ordem dos elementos em um Array unidimensional ou em uma parte do Array.
SetValue() Define o valor do elemento especificado no Array atual para o valor especificado.
Sort() Ordena os elementos de um array unidimensional.
ToString() Retorna uma string que representa o objeto atual. (Herdado de Object)
TrueForAll() Determina se todos os elementos no array atendem às condições definidas pelo predicado especificado.

Considerações Finais:

Em resumo, o Array é uma estrutura fundamental na programação, com suas vantagens e desvantagens. Sua principal utilidade aparece quando precisamos armazenar e manipular múltiplas variáveis do mesmo tipo de maneira eficiente, o que o torna indispensável em diversas situações.

Você provavelmente vai utilizar Arrays em muitos momentos ao longo do seu desenvolvimento. E você, já usou Arrays em seus projetos? Quais desafios ou benefícios encontrou? Compartilhe sua experiência nos comentários!

Top comments (0)