Domine Estruturas de Dados: Um Guia Completo

Estruturas de Dados e Algoritmos em geral, incluindo assuntos como Arrays, Pilhas, FIlas, Árvores Binárias, Métodos de Ordenação de Vetores (Selected Sort, Bubble Sort, Merge Sort, Quick Sort), busca linear e sequencial, entre outros.

As estruturas de dados são fundamentais para a programação e para a compreensão de como os algoritmos funcionam. Neste artigo, vamos explorar conceitos essenciais, desde pilhas e filas até métodos de ordenação e a notação Big O, permitindo que você desenvolva uma base sólida em estruturas de dados.

Estruturas de Dados - Apresentação do Curso

As estruturas de dados são maneiras organizadas de armazenar e manipular dados de forma eficiente. Este curso cobrirá os principais tipos de estruturas, suas aplicações e os algoritmos que as acompanham, permitindo que você resolva problemas complexos de forma eficaz.

O que são Pilhas

Uma pilha é uma estrutura de dados que segue o princípio Last In, First Out (LIFO), ou seja, o último elemento adicionado é o primeiro a ser removido.

Operações Básicas de uma Pilha

  • push: adiciona um elemento ao topo da pilha.
  • pop: remove o elemento do topo da pilha.
  • peek: retorna o elemento do topo sem removê-lo.
class Pilha {
    constructor() {
        this.itens = [];
    }

    push(elemento) {
        this.itens.push(elemento);
    }

    pop() {
        return this.itens.pop();
    }

    peek() {
        return this.itens[this.itens.length - 1];
    }
}

Listas, Pilhas e Filas em Estruturas de Dados - Qual a diferença?

As listas, pilhas e filas são todas estruturas de dados, mas possuem características e comportamentos distintos:

  • Lista: Coleção de elementos que podem ser acessados por índice.
  • Pilha: Segue a ordem LIFO.
  • Fila: Segue o princípio First In, First Out (FIFO), onde o primeiro elemento adicionado é o primeiro a ser removido.

Operações Básicas de uma Fila

  • enqueue: adiciona um elemento ao final da fila.
  • dequeue: remove o elemento do início da fila.
class Fila {
    constructor() {
        this.itens = [];
    }

    enqueue(elemento) {
        this.itens.push(elemento);
    }

    dequeue() {
        return this.itens.shift();
    }
}

Ordenação de Vetores com o método Selection Sort - Lógica de Programação

O Selection Sort é um algoritmo simples para ordenar arrays. Ele divide o array em uma parte ordenada e uma não ordenada, repetidamente selecionando o menor elemento da parte não ordenada e movendo-o para a parte ordenada.

Implementação do Selection Sort

function selectionSort(array) {
    for (let i = 0; i < array.length - 1; i++) {
        let minIndex = i;
        for (let j = i + 1; j < array.length; j++) {
            if (array[j] < array[minIndex]) {
                minIndex = j;
            }
        }
        [array[i], array[minIndex]] = [array[minIndex], array[i]];
    }
    return array;
}

Algoritmo Bubble Sort para ordenação de arrays

O Bubble Sort é outro algoritmo de ordenação que compara pares de elementos adjacentes e os troca se estiverem na ordem errada. Isso é repetido até que o array esteja ordenado.

Implementação do Bubble Sort

function bubbleSort(array) {
    let trocou;
    do {
        trocou = false;
        for (let i = 0; i < array.length - 1; i++) {
            if (array[i] > array[i + 1]) {
                [array[i], array[i + 1]] = [array[i + 1], array[i]];
                trocou = true;
            }
        }
    } while (trocou);
    return array;
}

O que é a Notação Big O em Algoritmos

A notação Big O é uma forma de descrever a complexidade de um algoritmo em termos de tempo ou espaço em função do tamanho da entrada. Isso nos ajuda a entender como o desempenho de um algoritmo se comporta à medida que o volume de dados aumenta.

Exemplos de Notação Big O

  • O(1): Tempo constante.
  • O(n): Tempo linear.
  • O(n^2): Tempo quadrático.

8 exemplos de Associatividade e Precedência de Operadores em Programação

A associatividade e a precedência de operadores determinam a ordem em que as operações são realizadas em uma expressão. Aqui estão alguns exemplos:

  1. Precedência: Os operadores de multiplicação e divisão têm precedência sobre adição e subtração.
  2. Associatividade: A maioria dos operadores tem associatividade à esquerda, como a subtração (A - B - C é A - (B - C)).
  3. Exemplo de Precedência:
    let resultado = 5 + 2 * 3; // resultado = 11, pois 2 * 3 é calculado primeiro.
    

O que é a Teoria dos Grafos - Introdução

A Teoria dos Grafos estuda estruturas matemáticas usadas para modelar pares de objetos. Os grafos consistem em vértices (ou nós) e arestas (conexões entre os nós).

Aplicações da Teoria dos Grafos

  • Redes de computadores.
  • Sistemas de transporte.
  • Análise de redes sociais.

Conclusão

Neste artigo, exploramos os conceitos fundamentais das estruturas de dados e algoritmos, desde pilhas e filas até métodos de ordenação e a notação Big O. Compreender esses conceitos é essencial para qualquer programador, pois eles formam a base para resolver problemas de maneira eficaz e eficiente. Aprofundar-se na teoria dos grafos também abre portas para uma variedade de aplicações práticas em computação e além.