"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Aprofunde-se na estrutura de dados do array

Aprofunde-se na estrutura de dados do array

Publicado em 2024-09-02
Navegar:640

O que é uma matriz?

  • Array é uma coleção de elementos, cada um identificado por um índice ou chave.
  • Arrays têm um tamanho fixo e dinâmico
  • Elementos homogêneos → todos os elementos em uma matriz são do mesmo tipo de dados.
  • Elementos heterogêneos → permitindo diferentes tipos de dados no mesmo array.
// Homogeneous 
int[] intArray = new int[5]; // Array of integers String[] 
stringArray = new String[5]; // Array of strings

// Heterogeneous
mixedArray = [1, "hello", 3.14, True]  # Mixed data types in one list

Características das matrizes

  • Indexação: Indexação baseada em zero na maioria das linguagens de programação.
  • Tamanho: Tamanho fixo (estático), não pode ser alterado dinamicamente (exceto em linguagens com arrays dinâmicos).
  • Alocação de memória: alocação de memória contígua para elementos do array. o que significa que cada elemento está diretamente próximo ao anterior na memória. Isso é possível porque todos os elementos são do mesmo tamanho, permitindo ao sistema calcular o endereço de memória de qualquer elemento usando seu índice.

Deep dive into Array Data Structure

Operações de matriz

  • Inserção: normalmente envolve elementos variáveis, complexidade de tempo O(n).
  • Exclusão: semelhante à inserção, os elementos podem precisar ser deslocados. Exceto o último índice
  • Traversal: Iterando através de todos os elementos, O(n) complexidade de tempo.
  • Tempo de acesso: O(1) complexidade de tempo para acessar um elemento usando seu índice.

Tipos de matrizes

  • Matriz unidimensional: forma mais simples, como uma lista.
  • Matriz multidimensional: Matrizes de matrizes (por exemplo, matriz 2D).
  • Jagged Array: Matrizes com diferentes comprimentos de submatrizes.
  • Arrays dinâmicos (por exemplo, ArrayList em Java): arrays que podem crescer de tamanho dinamicamente.

Vantagens de matrizes

  • Eficiência: O(1) tempo de acesso para elementos.
  • Utilização de memória: uso eficiente de memória devido ao armazenamento contíguo.
  • Facilidade de uso: simplifica o gerenciamento de dados e operações como classificação e pesquisa

Desvantagens das matrizes

  • Tamanho fixo: não é possível alterar o tamanho depois de declarado. exceto matriz dinâmica
  • Custo de inserção/exclusão: O(n) para inserir ou excluir um elemento, especialmente no meio.
  • Desperdício de memória: elementos não utilizados ainda ocupam espaço.

Aplicações de matrizes no mundo real

  • Armazenamento de dados: comum na programação para armazenamento de coleções de elementos.
  • Algoritmos de classificação: muitos algoritmos de classificação são projetados para matrizes (por exemplo, QuickSort, MergeSort).
  • Operações matriciais: matrizes 2D são usadas para operações matriciais em matemática e gráficos.
  • Implementando pilhas e filas: estruturas de dados básicas podem ser implementadas usando arrays.

Melhores práticas com matrizes

  • Evite cópias desnecessárias: esteja atento às operações que exigem a cópia de elementos.
  • Use matrizes dinâmicas quando necessário: se o tamanho for incerto, prefira matrizes dinâmicas.
  • Aproveite as funções integradas: utilize funções específicas da linguagem para operações de array.
  • Verificação de limite: sempre verifique as condições de limite para evitar IndexOutOfBoundsException.

Exemplo de array estático e dinâmico em GO

package main

import (
    "fmt"
    "unsafe"
)

func main() {
    // Static Array
    var staticArr [5]int64
    staticArr[0] = 1
    staticArr[1] = 2
    staticArr[2] = 3
    staticArr[3] = 4
    staticArr[4] = 5
    elementSize := unsafe.Sizeof(staticArr[0])
    totalSize := elementSize * uintptr(len(staticArr))
    fmt.Printf("Memory used by static array: %d bytes\n", totalSize)
    fmt.Println()

    // Dynamic Array (Slice)
    dynamicArr := make([]int32, 0, 5)
    before := unsafe.Sizeof(dynamicArr[0])
    beforeTotal := before * uintptr(len(dynamicArr))
    fmt.Printf("Memory used by dynamic array (before): %d bytes\n", beforeTotal)

    // Append elements to dynamic array
    for i := 0; i 




          

            
        
Declaração de lançamento Este artigo foi reproduzido em: https://dev.to/chandra179/deep-dive-into-array-data-structure-1g82?1 Se houver alguma violação, entre em contato com [email protected] para excluí-la
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3