Big O (ou "Notação Big O") é uma maneira de descrever o quão rápido ou lento um algoritmo é, dependendo do tamanho da entrada (quantidade de dados).
Big O | Significado | Exemplo |
---|---|---|
O(1) | Tempo constante (super rápido) | Acessar o primeiro item de um array |
O(n) | Tempo linear | Tempo cresce conforme o número de itens 📈 |
O(n²) | Tempo quadrático (bem mais lento) | Dois loops aninhados |
O(log n) | Logarítmico (muito eficiente) | Busca binária |
Uma lista encadeada é uma estrutura de dados linear onde cada elemento (chamado de nó) aponta para o próximo, formando uma sequência. É muito usada quando precisamos inserir ou remover elementos com frequência e eficiência.
Estrutura de um Nó: Cada nó contém duas partes:
Dado – o valor armazenado.
Próximo – uma referência (ou ponteiro) para o próximo nó.
[ dado | próximo ] → [ dado | próximo ] → [ dado | próximo ] → None
10 → 5 → 3 → 7 → 15 → 20 → null
-
1 Single LinkedList
a. Push (Challenge) b. Pop (Chellenge) c. Unshuft (Chellenge) d. Shift (Chellenge) e. GetFist (Chellenge) f. GetLast (Chellenge) g. Set (Chellenge) h. Insert (Chellenge) i. Size (Chellenge) j. Clear (Chellenge)
-
2 Doubly LinkedList
null ← 10 ⇄ 5 ⇄ 3 ⇄ 7 ⇄ 15 ⇄ 20 → null
[ dado | prev | next ] <-> [ dado | prev | next ] <-> [ dado | prev | next ] -> None
dado (data) próximo (next) → aponta para o próximo nó anterior (prev) → aponta para o nó anterior
a. Push (Chellenge)
b. Pop (Chellenge)
c. Unshift (Chellenge)
d. Shift (Chellenge)
- 3 Reverse LinkedList
-
- Stack
Topo → [20]
[15]
[7]
[3]
[5]
Base → [10]
a. push(chellenge)
b. pop()
c. top()
- 2 Queue
[10] → [5] → [15] → [3] → [7] → [20]
(início) (fim)
a. enqueue (Chellenge) b. dequeue()
-
- Intervi Questions
a. Min Stack
b. Valid Parenthesis
c. Reverse String Using Stack
Definição: Stack (Pilha) é uma estrutura de dados onde o último elemento que entra é o primeiro que sai — isso é chamado de LIFO (Last In, First Out).
Exemplo prático:
Empilhar pratos: o último prato colocado é o primeiro que você pega.
Operações principais:
push(elemento): adiciona um elemento ao topo.
pop(): remove o elemento do topo.
peek() ou top(): vê qual é o elemento no topo, sem remover.
Uso no mundo real: ✅ Função "desfazer" em editores de texto. ✅ Pilha de chamadas (call stack) em linguagens de programação.
Data Structure use to Stoore keu-value
pairs.
Javascript -> Objects; Python -> Dictionarries; Go -> Maps;
Armazena pares chave → valor
Usa uma função chamada hash para transformar uma chave em um índice
Permite buscas muito rápidas (complexidade O(1), idealmente)
{
"root": 10,
"leftOf10": 5,
"rightOf10": 15,
"leftOf5": 3,
"rightOf5": 7,
"rightOf15": 20
}
const hashTable = {
nome: "Gleidson",
idade: 25,
cidade: "Belém"
};
console.log(hashTable["nome"]); // "Gleidson"
Uma função hash:
É uma função que recebe uma chave (por exemplo, uma string como "nome")
E retorna um índice numérico fixo, que indica onde armazenar esse valor no array interno da Hash Table.
Ela é o coração da estrutura, pois define onde os dados serão guardados na memória.
Tree é uma estrutura de dados hierárquica, como uma árvore de verdade de cabeça pra baixo:
Começa com um nó raiz (root)
E se ramifica em outros nós (nodes ou “filhos”)
10 ← raiz (root)
/ \
5 15 ← filhos (children)
/ \ \
3 7 20 ← netos (subníveis)
Cada nó pode ter:
Um valor,
Um pai (parent) — exceto a raiz,
E filhos (children).
Árvores binárias (cada nó tem até 2 filhos)
Muito usada em algoritmos, busca e ordenação.
-
DOM (Document Object Model) em HTML/JavaScript é uma árvore!
-
A tag é a raiz, e dentro temos ,
, etc. -
Sistemas de arquivos (pastas e arquivos) também são árvores.
-
Banco de dados usa árvores para organizar índices.
-
Compiladores e expressões matemáticas (ex: árvore de expressão).
Recursão é quando uma função chama a si mesma para resolver um problema em partes menores.
🌀 Exemplo clássico: Fibonacci
function fib(n) {
if (n === 0) return 0;
if (n === 1) return 1;
return fib(n - 1) + fib(n - 2);
}
fib(5)
/ \
fib(4) fib(3)
/ \ / \
fib(3) fib(2) fib(2) fib(1)
...
Árvores (percurso em profundidade)
Grafos (busca DFS)
Problemas de divisão e conquista (Merge Sort, Quick Sort)
Backtracking (como resolver sudoku, labirintos, etc.)
Suponha esta árvore binária:
A
/ \
B C
/ \ / \
D E F G
Visita nível por nível da árvore, da esquerda pra direita.
Usa fila (queue).
Ordem de visita: A → B → C → D → E → F → G
Visita a raiz primeiro, depois o lado esquerdo, depois o direito.
Usa recursão ou pilha (stack).
Ordem de visita: A → B → D → E → C → F → G
Visita as folhas primeiro, depois o nó pai.
Muito usado para deletar árvores, porque visita os filhos antes dos pais.
Ordem de visita: D → E → B → F → G → C → A
Um grafo é uma estrutura de dados usada para representar relações entre objetos. Ele é formado por:
-
Vértices (ou nós): Os elementos ou pontos do grafo.
-
Arestas: As conexões entre os vértices.
Um grafo é um conjunto de vértices conectados por arestas, usado para modelar conexões ou relações entre elementos.
English | Português | Description |
---|---|---|
Undirected Graph | Grafo não direcionado | The edges have no direction (A-B is same as B-A). |
Directed Graph | Grafo direcionado (Digrafo) | The edges have direction (A→B is different from B→A). |
Weighted Graph | Grafo ponderado | Each edge has a weight or cost (like distance, time). |
Unweighted Graph | Grafo não ponderado | Edges do not have weights. |
Cyclic Graph | Grafo cíclico | Contains at least one cycle. |
Acyclic Graph | Grafo acíclico | Contains no cycles. |
Connected Graph | Grafo conexo | There is a path between every pair of vertices. |
Disconnected Graph | Grafo desconexo | Some vertices cannot be reached from others. |
Grafos são usados em várias áreas, como:
-
Redes sociais (Ex: quem segue quem)
-
Mapas e GPS (Rotas entre cidades ou locais)
-
Redes de computadores
-
Sistemas de recomendação
-
Algoritmos de busca (BFS, DFS, Dijkstra, etc.)
ex:
A --- B
| |
C --- D
Vértices: A, B, C, D
Arestas: A–B, A–C, B–D, C–D