Tipo | Descrição | Exemplo |
---|---|---|
Estática | Tamanho fixo definido em tempo de compilação | int vetor[10]; |
Dinâmica | Tamanho definido em tempo de execução (malloc) | int *v = malloc(10 * sizeof(int)); |
Agrupamento de variáveis de tipos diferentes sob um único nome. Permite criar tipos de dados personalizados.
struct Aluno {
char nome[50];
int idade;
float nota;
};
Ponteiros para structs permitem passagem por referência e alocação dinâmica.
Operação | Complexidade |
---|---|
Inserir no início | O(1) |
Inserir no fim | O(n) |
Buscar elemento | O(n) |
Remover elemento | O(n) |
Estrutura | Vantagens | Desvantagens | Melhor Caso de Uso |
---|---|---|---|
Vetor | Acesso rápido por índice, baixo overhead | Tamanho fixo, inserções/remoções custosas | Quando o tamanho é conhecido e há muitos acessos aleatórios |
Lista Encadeada | Tamanho dinâmico, inserções/remoções eficientes | Acesso sequencial, maior uso de memória | Quando o tamanho varia muito e há muitas inserções/remoções |
Pilha | Operações rápidas O(1), simples | Acesso limitado ao topo | Chamadas de função, undo/redo, avaliação de expressões |
Fila | Operações rápidas O(1), ordem justa | Acesso limitado às extremidades | Processamento em ordem de chegada, buffers |
Para vetores grandes com muitas buscas, prefira ordenados com busca binária
Para aplicações com muitas inserções/remoções, prefira listas encadeadas
Sempre libere memória alocada dinamicamente com free()
Use passagem por referência (ponteiros) para structs grandes para melhor desempenho