Sumário do Curso
Estruturas de Dados 🧠
Aprenda a fundamentação teórica e a implementação prática das principais estruturas de dados utilizadas no desenvolvimento de software de alta performance.
Foco do Curso
Metodologia: Abordagem prática com foco em implementação em linguagem C, análise de complexidade e resolução de problemas estruturados.
🎯 O Que Você Vai Aprender
-
Gerenciamento de Memória --- Entenda como os dados são organizados fisicamente e como manipular ponteiros e referências de forma segura. Ver Fundamentos
-
Análise Big-O --- Aprenda a medir a eficiência de seus algoritmos em termos de tempo e espaço para tomar decisões de arquitetura. Ver Complexidade
-
Árvores e Grafos --- Implemente estruturas hierárquicas e relacionais complexas para modelar dados do mundo real como redes e caminhos. Ver Árvores
-
Busca e Hash --- Otimize o acesso aos dados utilizando Tabelas Hash e Árvores de Busca Binária para performance O(1) e O(log n). Ver Projetos
📚 Jornada de Aprendizado (16 Aulas)
O curso é estruturado para levar você do básico ao avançado em estruturas de dados.
🧱 Fundamentos e Estruturas Básicas
- Aula 01 - Introdução às Estruturas 🧩
- Aula 02 - Revisão de Lógica 🏗️
- Aula 03 - Arrays (Vetores) 📊
- Aula 04 - Matrizes 📦
- Aula 05 - Análise Big-O 📈
🔗 Listas e Sequências
- Aula 06 - Listas Encadeadas 🔗
- Aula 10 - Recursão Aplicada (Fundamento) 🔄
- Aula 08 - Pilhas (Stacks) 📚
- Aula 09 - Filas (Queues) 🚶♂️
🌲 Árvores e Avançados
🗺️ Mapas e Grafos
Plano de Ensino 🧭
Curso: Estruturas de Dados
Público-alvo: Estudantes de ADS, Ciência da Computação e Desenvolvedores de Software
Carga Horária: 20 Aulas (80 Horas Teórico-Práticas)
🎯 1. Objetivos do Curso
- Compreender os fundamentos conceituais e arquiteturais de Estruturas de Dados.
- Aplicar padrões de projeto, sintaxe moderna e boas práticas da indústria.
- Desenvolver soluções completas através de exercícios práticos e desafios de projeto.
📚 2. Cronograma de Aulas (Matriz de 20 Semanas)
| Aula | Tema Central | Atividades e Entregas |
|---|---|---|
| 01 | Introdução às Estruturas de Dados e Tipos Abstratos de Dados (TAD) | Teoria, Prática Guiada, Quiz e Exercícios |
| 02 | Ponteiros, Alocação Dinâmica e Gestão de Memória na Heap | Teoria, Prática Guiada, Quiz e Exercícios |
| 03 | Vetores Dinâmicos e Redimensionamento Amortizado | Teoria, Prática Guiada, Quiz e Exercícios |
| 04 | Matrizes e Mapeamento Linear na Memória | Teoria, Prática Guiada, Quiz e Exercícios |
| 05 | Análise Assintótica de Complexidade (Notação Big-O) | Teoria, Prática Guiada, Quiz e Exercícios |
| 06 | Listas Simplesmente Encadeadas | Teoria, Prática Guiada, Quiz e Exercícios |
| 07 | Listas Duplamente Encadeadas e Listas Circulares | Teoria, Prática Guiada, Quiz e Exercícios |
| 08 | Pilhas (Stacks): Princípio LIFO e Aplicações | Teoria, Prática Guiada, Quiz e Exercícios |
| 09 | Filas (Queues): Princípio FIFO, Fila Circular e Deque | Teoria, Prática Guiada, Quiz e Exercícios |
| 10 | Recursão Aplicada, Pilha de Execução e Divisão e Conquista | Teoria, Prática Guiada, Quiz e Exercícios |
| 11 | Algoritmos de Ordenação Elementares: Bubble, Selection e Insertion Sort | Teoria, Prática Guiada, Quiz e Exercícios |
| 12 | Algoritmos de Ordenação Eficientes: MergeSort e QuickSort | Teoria, Prática Guiada, Quiz e Exercícios |
| 13 | Árvores Binárias e Árvores de Busca Binária (BST) | Teoria, Prática Guiada, Quiz e Exercícios |
| 14 | Tabelas Hash: Funções de Espalhamento e Resolução de Colisões | Teoria, Prática Guiada, Quiz e Exercícios |
| 15 | Heaps Binários e Filas de Prioridade (Priority Queues) | Teoria, Prática Guiada, Quiz e Exercícios |
| 16 | Introdução aos Grafos: Representação e Algoritmos de Busca | Teoria, Prática Guiada, Quiz e Exercícios |
| 17 | Árvores Balanceadas: Árvore AVL e Rotações | Teoria, Prática Guiada, Quiz e Exercícios |
| 18 | Estruturas Avançadas de Busca: Árvores Trie e Busca de Prefixos | Teoria, Prática Guiada, Quiz e Exercícios |
| 19 | Algoritmos de Menor Caminho em Grafos: Dijkstra e Fila de Prioridade | Teoria, Prática Guiada, Quiz e Exercícios |
| 20 | Projeto Capstone: Motor de Indexação e Busca Rápida em Memória | Teoria, Prática Guiada, Quiz e Exercícios |
🧠 3. Metodologia de Ensino
- Teoria Fundamentada: Aulas com conceitos detalhados, diagramas arquiteturais e sintaxe de referência.
- Ciclo Teoria ⇄ Prática: Cada aula conta com Quiz Interativo (10 questões) para validação imediata, Lista de Exercícios Sanfonados (com Gabarito Explicado) e Desafio de Projeto Prático.
- Laboratório Contínuo: Ambientes configurados passo a passo na seção de Setups da plataforma.
💼 4. Competências e Perfil Desenvolvido
- Dominar as ferramentas e fluxos de desenvolvimento de Estruturas de Dados.
- Resolver problemas técnicos de alta complexidade com código limpo e performático.
- Construir portfólio prático com 20 projetos aplicados.
📊 5. Critérios de Avaliação
- 20 Listas de Exercícios: Resolução individual dividida em Básico, Intermediário e Desafio.
- 20 Quizzes Interativos: Validação formativa com feedback imediato via JavaScript.
- 20 Desafios de Projetos: Aplicações práticas consolidando o aprendizado de cada unidade.
Aulas
Aulas do Curso
Bem-vindo à seção de aulas! Aqui você encontra todo o conteúdo do curso organizado em 5 módulos estruturados.
📚 Módulos do Curso
-
Módulo 1: Fundamentos & Bases ---
-
Módulo 2: Arquitetura & Conceitos Essenciais ---
-
Módulo 3: Engenharia & Aplicação Prática ---
-
Módulo 4: Software, Ferramentas & Padrões ---
-
Módulo 5: Tópicos Avançados & Projeto Capstone ---
Aula 01 - Introdução às Estruturas de Dados e Tipos Abstratos de Dados (TAD) 🧱
Objetivo Pedagógico
Objetivo: Conceito de Tipo Abstrato de Dados (TAD), separação estrita entre especificação da interface (.h) e implementação interna (.c), e organização lógica de dados na memória.
📑 1. Fundamentos Teóricos & Análise Estrutural
Conceito de Tipo Abstrato de Dados (TAD), separação estrita entre especificação da interface (.h) e implementação interna (.c), e organização lógica de dados na memória. O domínio desta estrutura de dados é primordial para o desenvolvimento de software escalável, onde o consumo de ciclos de CPU e a alocação de memória RAM na heap determinam a viabilidade operacional do sistema.
📐 Representação Abstrata & Mapeamento em Memória
graph LR
A["Entrada de Dados"] --> B["Introdução às Estruturas de Dados e Tipos Abstratos de Dados (TAD)"]
B --> C["Operação / Manipulação de Ponteiros"]
C --> D["Resultado / Complexidade Assintótica"]
style A fill:#e3f2fd,stroke:#1565c0
style B fill:#fff3e0,stroke:#e65100,stroke-width:2px
style C fill:#e8f5e9,stroke:#2e7d32
style D fill:#f3e5f5,stroke:#7b1fa2
🔍 Pilares e Propriedades Algorítmicas
Nesta unidade, exploramos formalmente: - Tipo Abstrato de Dados (TAD): Fundamento teórico indispensável para a correta aplicação computacional. - Encapsulamento em C: Fundamento teórico indispensável para a correta aplicação computacional. - Ocultamento de Informação: Fundamento teórico indispensável para a correta aplicação computacional. - Interface vs Implementação: Fundamento teórico indispensável para a correta aplicação computacional. - Ciclo de Vida de Dados: Fundamento teórico indispensável para a correta aplicação computacional.
🛠️ 2. Implementação Técnica em Linguagem C
Abaixo está o código de referência estruturado seguindo os padrões de boas práticas da linguagem C (ANSI C / C99), com gerenciamento dinâmico de memória e verificação de ponteiros nulos:
// TAD Ponto 2D - Encapsulamento em C
// ponto.h
typedef struct Ponto Ponto;
Ponto* ponto_criar(float x, float y);
void ponto_liberar(Ponto* p);
float ponto_distancia(Ponto* p1, Ponto* p2);
// ponto.c
#include <stdlib.h>
#include <math.h>
struct Ponto { float x, y; };
Ponto* ponto_criar(float x, float y) {
Ponto* p = (Ponto*) malloc(sizeof(Ponto));
if (p != NULL) { p->x = x; p->y = y; }
return p;
}
void ponto_liberar(Ponto* p) { free(p); }
float ponto_distancia(Ponto* p1, Ponto* p2) {
float dx = p2->x - p1->x, dy = p2->y - p1->y;
return sqrtf(dx*dx + dy*dy);
}
💡 Análise de Eficiência e Complexidade
- Complexidade Temporal: A implementação prioriza caminhos de execução diretos para atingir o menor custo assintótico possível.
- Gerenciamento de Memória: Toda alocação realizada na heap deve possuir uma rotina correspondente de liberação para assegurar vazamento zero de memória (zero memory leaks).
- Casos de Borda: Tratamento rigoroso de listas vazias, ponteiros nulos (
NULL) e estouros de capacidade.
🎯 3. Próximos Passos & Sequência Didática
-
Slides da Aula
-
Quiz de Fixação
-
Exercícios Práticos
-
Desafio de Projeto
Aula 02 - Ponteiros, Alocação Dinâmica e Gestão de Memória na Heap 🧱
Objetivo Pedagógico
Objetivo: Operadores de endereço (&) e derreferência (*), aritmética de ponteiros, funções malloc, calloc, realloc e free, e prevenção de Memory Leaks e Dangling Pointers.
📑 1. Fundamentos Teóricos & Análise Estrutural
Operadores de endereço (&) e derreferência (*), aritmética de ponteiros, funções malloc, calloc, realloc e free, e prevenção de Memory Leaks e Dangling Pointers. O domínio desta estrutura de dados é primordial para o desenvolvimento de software escalável, onde o consumo de ciclos de CPU e a alocação de memória RAM na heap determinam a viabilidade operacional do sistema.
📐 Representação Abstrata & Mapeamento em Memória
graph LR
A["Entrada de Dados"] --> B["Ponteiros, Alocação Dinâmica e Gestão de Memória na Heap"]
B --> C["Operação / Manipulação de Ponteiros"]
C --> D["Resultado / Complexidade Assintótica"]
style A fill:#e3f2fd,stroke:#1565c0
style B fill:#fff3e0,stroke:#e65100,stroke-width:2px
style C fill:#e8f5e9,stroke:#2e7d32
style D fill:#f3e5f5,stroke:#7b1fa2
🔍 Pilares e Propriedades Algorítmicas
Nesta unidade, exploramos formalmente: - Ponteiros e Endereçamento: Fundamento teórico indispensável para a correta aplicação computacional. - Heap vs Stack: Fundamento teórico indispensável para a correta aplicação computacional. - malloc e calloc: Fundamento teórico indispensável para a correta aplicação computacional. - Memory Leaks: Fundamento teórico indispensável para a correta aplicação computacional. - Dangling Pointers: Fundamento teórico indispensável para a correta aplicação computacional.
🛠️ 2. Implementação Técnica em Linguagem C
Abaixo está o código de referência estruturado seguindo os padrões de boas práticas da linguagem C (ANSI C / C99), com gerenciamento dinâmico de memória e verificação de ponteiros nulos:
// Alocação dinâmica segura com prevenção de vazamentos
#include <stdio.h>
#include <stdlib.h>
int* criar_vetor(size_t n) {
int* v = (int*) calloc(n, sizeof(int));
if (v == NULL) {
fprintf(stderr, "Erro: Falha de memória na heap!\n");
exit(EXIT_FAILURE);
}
return v;
}
void liberar_vetor(int** v) {
if (v != NULL && *v != NULL) {
free(*v);
*v = NULL; // Evita dangling pointer
}
}
💡 Análise de Eficiência e Complexidade
- Complexidade Temporal: A implementação prioriza caminhos de execução diretos para atingir o menor custo assintótico possível.
- Gerenciamento de Memória: Toda alocação realizada na heap deve possuir uma rotina correspondente de liberação para assegurar vazamento zero de memória (zero memory leaks).
- Casos de Borda: Tratamento rigoroso de listas vazias, ponteiros nulos (
NULL) e estouros de capacidade.
🎯 3. Próximos Passos & Sequência Didática
-
Slides da Aula
-
Quiz de Fixação
-
Exercícios Práticos
-
Desafio de Projeto
Aula 03 - Vetores Dinâmicos e Redimensionamento Amortizado 🧱
Objetivo Pedagógico
Objetivo: Armazenamento contíguo em memória, acesso O(1) por indexação direta, estratégia de duplicação geométrica da capacidade e custo amortizado de inserção.
📑 1. Fundamentos Teóricos & Análise Estrutural
Armazenamento contíguo em memória, acesso O(1) por indexação direta, estratégia de duplicação geométrica da capacidade e custo amortizado de inserção. O domínio desta estrutura de dados é primordial para o desenvolvimento de software escalável, onde o consumo de ciclos de CPU e a alocação de memória RAM na heap determinam a viabilidade operacional do sistema.
📐 Representação Abstrata & Mapeamento em Memória
graph LR
A["Entrada de Dados"] --> B["Vetores Dinâmicos e Redimensionamento Amortizado"]
B --> C["Operação / Manipulação de Ponteiros"]
C --> D["Resultado / Complexidade Assintótica"]
style A fill:#e3f2fd,stroke:#1565c0
style B fill:#fff3e0,stroke:#e65100,stroke-width:2px
style C fill:#e8f5e9,stroke:#2e7d32
style D fill:#f3e5f5,stroke:#7b1fa2
🔍 Pilares e Propriedades Algorítmicas
Nesta unidade, exploramos formalmente: - Contiguidade em Memória: Fundamento teórico indispensável para a correta aplicação computacional. - Indexação Direta O(1): Fundamento teórico indispensável para a correta aplicação computacional. - Custo Amortizado: Fundamento teórico indispensável para a correta aplicação computacional. - realloc: Fundamento teórico indispensável para a correta aplicação computacional. - Fator de Carga: Fundamento teórico indispensável para a correta aplicação computacional.
🛠️ 2. Implementação Técnica em Linguagem C
Abaixo está o código de referência estruturado seguindo os padrões de boas práticas da linguagem C (ANSI C / C99), com gerenciamento dinâmico de memória e verificação de ponteiros nulos:
// Implementação de Vetor Dinâmico com Redimensionamento 2x
typedef struct {
int* dados;
size_t tamanho;
size_t capacidade;
} VetorDinamico;
void vetor_inserir(VetorDinamico* v, int elemento) {
if (v->tamanho == v->capacidade) {
v->capacidade = (v->capacidade == 0) ? 4 : v->capacidade * 2;
v->dados = (int*) realloc(v->dados, v->capacidade * sizeof(int));
}
v->dados[v->tamanho++] = elemento;
}
💡 Análise de Eficiência e Complexidade
- Complexidade Temporal: A implementação prioriza caminhos de execução diretos para atingir o menor custo assintótico possível.
- Gerenciamento de Memória: Toda alocação realizada na heap deve possuir uma rotina correspondente de liberação para assegurar vazamento zero de memória (zero memory leaks).
- Casos de Borda: Tratamento rigoroso de listas vazias, ponteiros nulos (
NULL) e estouros de capacidade.
🎯 3. Próximos Passos & Sequência Didática
-
Slides da Aula
-
Quiz de Fixação
-
Exercícios Práticos
-
Desafio de Projeto
Aula 04 - Matrizes e Mapeamento Linear na Memória 🧱
Objetivo Pedagógico
Objetivo: Mapeamento bidimensional em espaço linear, ordem por linhas (Row-Major Order), matrizes dinâmicas como ponteiros para ponteiros vs vetor unidimensional linearizado.
📑 1. Fundamentos Teóricos & Análise Estrutural
Mapeamento bidimensional em espaço linear, ordem por linhas (Row-Major Order), matrizes dinâmicas como ponteiros para ponteiros vs vetor unidimensional linearizado. O domínio desta estrutura de dados é primordial para o desenvolvimento de software escalável, onde o consumo de ciclos de CPU e a alocação de memória RAM na heap determinam a viabilidade operacional do sistema.
📐 Representação Abstrata & Mapeamento em Memória
graph LR
A["Entrada de Dados"] --> B["Matrizes e Mapeamento Linear na Memória"]
B --> C["Operação / Manipulação de Ponteiros"]
C --> D["Resultado / Complexidade Assintótica"]
style A fill:#e3f2fd,stroke:#1565c0
style B fill:#fff3e0,stroke:#e65100,stroke-width:2px
style C fill:#e8f5e9,stroke:#2e7d32
style D fill:#f3e5f5,stroke:#7b1fa2
🔍 Pilares e Propriedades Algorítmicas
Nesta unidade, exploramos formalmente: - Row-Major Order: Fundamento teórico indispensável para a correta aplicação computacional. - Localidade Espacial de Cache: Fundamento teórico indispensável para a correta aplicação computacional. - Matriz Linearizada: Fundamento teórico indispensável para a correta aplicação computacional. - Ponteiro de Ponteiros: Fundamento teórico indispensável para a correta aplicação computacional. - Eficiência de Acesso: Fundamento teórico indispensável para a correta aplicação computacional.
🛠️ 2. Implementação Técnica em Linguagem C
Abaixo está o código de referência estruturado seguindo os padrões de boas práticas da linguagem C (ANSI C / C99), com gerenciamento dinâmico de memória e verificação de ponteiros nulos:
// Matriz linearizada em vetor contíguo (Cache Friendly)
typedef struct {
int* dados;
int linhas;
int colunas;
} MatrizLinear;
int matriz_obter(MatrizLinear* m, int r, int c) {
// Mapeamento Row-Major: index = r * total_colunas + c
return m->dados[r * m->colunas + c];
}
void matriz_definir(MatrizLinear* m, int r, int c, int valor) {
m->dados[r * m->colunas + c] = valor;
}
💡 Análise de Eficiência e Complexidade
- Complexidade Temporal: A implementação prioriza caminhos de execução diretos para atingir o menor custo assintótico possível.
- Gerenciamento de Memória: Toda alocação realizada na heap deve possuir uma rotina correspondente de liberação para assegurar vazamento zero de memória (zero memory leaks).
- Casos de Borda: Tratamento rigoroso de listas vazias, ponteiros nulos (
NULL) e estouros de capacidade.
🎯 3. Próximos Passos & Sequência Didática
-
Slides da Aula
-
Quiz de Fixação
-
Exercícios Práticos
-
Desafio de Projeto
Aula 05 - Análise Assintótica de Complexidade (Notação Big-O) 🧱
Objetivo Pedagógico
Objetivo: Comportamento assintótico de algoritmos, classes de complexidade O(1), O(log n), O(n), O(n log n), O(n^2), análise de pior caso, melhor caso e caso médio.
📑 1. Fundamentos Teóricos & Análise Estrutural
Comportamento assintótico de algoritmos, classes de complexidade O(1), O(log n), O(n), O(n log n), O(n^2), análise de pior caso, melhor caso e caso médio. O domínio desta estrutura de dados é primordial para o desenvolvimento de software escalável, onde o consumo de ciclos de CPU e a alocação de memória RAM na heap determinam a viabilidade operacional do sistema.
📐 Representação Abstrata & Mapeamento em Memória
graph LR
A["Entrada de Dados"] --> B["Análise Assintótica de Complexidade (Notação Big-O)"]
B --> C["Operação / Manipulação de Ponteiros"]
C --> D["Resultado / Complexidade Assintótica"]
style A fill:#e3f2fd,stroke:#1565c0
style B fill:#fff3e0,stroke:#e65100,stroke-width:2px
style C fill:#e8f5e9,stroke:#2e7d32
style D fill:#f3e5f5,stroke:#7b1fa2
🔍 Pilares e Propriedades Algorítmicas
Nesta unidade, exploramos formalmente: - Notação Big-O (Pior Caso): Fundamento teórico indispensável para a correta aplicação computacional. - Omega e Theta: Fundamento teórico indispensável para a correta aplicação computacional. - Complexidade Temporal: Fundamento teórico indispensável para a correta aplicação computacional. - Complexidade Espacial: Fundamento teórico indispensável para a correta aplicação computacional. - Trade-off Tempo-Espaço: Fundamento teórico indispensável para a correta aplicação computacional.
🛠️ 2. Implementação Técnica em Linguagem C
Abaixo está o código de referência estruturado seguindo os padrões de boas práticas da linguagem C (ANSI C / C99), com gerenciamento dinâmico de memória e verificação de ponteiros nulos:
// Comparação: Busca Linear O(n) vs Busca Binária O(log n)
int busca_binaria(const int arr[], int n, int chave) {
int inicio = 0, fim = n - 1;
while (inicio <= fim) {
int meio = inicio + (fim - inicio) / 2; // Previne overflow
if (arr[meio] == chave) return meio;
if (arr[meio] < chave) inicio = meio + 1;
else fim = meio - 1;
}
return -1; // Não encontrado
}
💡 Análise de Eficiência e Complexidade
- Complexidade Temporal: A implementação prioriza caminhos de execução diretos para atingir o menor custo assintótico possível.
- Gerenciamento de Memória: Toda alocação realizada na heap deve possuir uma rotina correspondente de liberação para assegurar vazamento zero de memória (zero memory leaks).
- Casos de Borda: Tratamento rigoroso de listas vazias, ponteiros nulos (
NULL) e estouros de capacidade.
🎯 3. Próximos Passos & Sequência Didática
-
Slides da Aula
-
Quiz de Fixação
-
Exercícios Práticos
-
Desafio de Projeto
Aula 06 - Listas Simplesmente Encadeadas 🧱
Objetivo Pedagógico
Objetivo: Encadeamento por nós dinâmicos e ponteiros 'próximo'. Operações de inserção no início O(1), inserção no fim O(n), remoção por valor e busca linear.
📑 1. Fundamentos Teóricos & Análise Estrutural
Encadeamento por nós dinâmicos e ponteiros 'próximo'. Operações de inserção no início O(1), inserção no fim O(n), remoção por valor e busca linear. O domínio desta estrutura de dados é primordial para o desenvolvimento de software escalável, onde o consumo de ciclos de CPU e a alocação de memória RAM na heap determinam a viabilidade operacional do sistema.
📐 Representação Abstrata & Mapeamento em Memória
graph LR
A["Entrada de Dados"] --> B["Listas Simplesmente Encadeadas"]
B --> C["Operação / Manipulação de Ponteiros"]
C --> D["Resultado / Complexidade Assintótica"]
style A fill:#e3f2fd,stroke:#1565c0
style B fill:#fff3e0,stroke:#e65100,stroke-width:2px
style C fill:#e8f5e9,stroke:#2e7d32
style D fill:#f3e5f5,stroke:#7b1fa2
🔍 Pilares e Propriedades Algorítmicas
Nesta unidade, exploramos formalmente: - Nó Encadeado: Fundamento teórico indispensável para a correta aplicação computacional. - Ponteiro Próximo: Fundamento teórico indispensável para a correta aplicação computacional. - Inserção O(1) no Início: Fundamento teórico indispensável para a correta aplicação computacional. - Ponteiro Duplo em C: Fundamento teórico indispensável para a correta aplicação computacional. - Desalocação Sequencial: Fundamento teórico indispensável para a correta aplicação computacional.
🛠️ 2. Implementação Técnica em Linguagem C
Abaixo está o código de referência estruturado seguindo os padrões de boas práticas da linguagem C (ANSI C / C99), com gerenciamento dinâmico de memória e verificação de ponteiros nulos:
// Lista Encadeada Simples
typedef struct No {
int valor;
struct No* proximo;
} No;
void lista_inserir_inicio(No** cabeca, int valor) {
No* novo = (No*) malloc(sizeof(No));
novo->valor = valor;
novo->proximo = *cabeca;
*cabeca = novo;
}
void lista_remover(No** cabeca, int valor) {
No* atual = *cabeca;
No* anterior = NULL;
while (atual != NULL && atual->valor != valor) {
anterior = atual;
atual = atual->proximo;
}
if (atual == NULL) return; // Não encontrado
if (anterior == NULL) *cabeca = atual->proximo;
else anterior->proximo = atual->proximo;
free(atual);
}
💡 Análise de Eficiência e Complexidade
- Complexidade Temporal: A implementação prioriza caminhos de execução diretos para atingir o menor custo assintótico possível.
- Gerenciamento de Memória: Toda alocação realizada na heap deve possuir uma rotina correspondente de liberação para assegurar vazamento zero de memória (zero memory leaks).
- Casos de Borda: Tratamento rigoroso de listas vazias, ponteiros nulos (
NULL) e estouros de capacidade.
🎯 3. Próximos Passos & Sequência Didática
-
Slides da Aula
-
Quiz de Fixação
-
Exercícios Práticos
-
Desafio de Projeto
Aula 07 - Listas Duplamente Encadeadas e Listas Circulares 🧱
Objetivo Pedagógico
Objetivo: Nós com ponteiros anterior e próximo, navegação bidirecional, remoção em O(1) com referência direta ao nó e variantes circulares para escalonamento Round-Robin.
📑 1. Fundamentos Teóricos & Análise Estrutural
Nós com ponteiros anterior e próximo, navegação bidirecional, remoção em O(1) com referência direta ao nó e variantes circulares para escalonamento Round-Robin. O domínio desta estrutura de dados é primordial para o desenvolvimento de software escalável, onde o consumo de ciclos de CPU e a alocação de memória RAM na heap determinam a viabilidade operacional do sistema.
📐 Representação Abstrata & Mapeamento em Memória
graph LR
A["Entrada de Dados"] --> B["Listas Duplamente Encadeadas e Listas Circulares"]
B --> C["Operação / Manipulação de Ponteiros"]
C --> D["Resultado / Complexidade Assintótica"]
style A fill:#e3f2fd,stroke:#1565c0
style B fill:#fff3e0,stroke:#e65100,stroke-width:2px
style C fill:#e8f5e9,stroke:#2e7d32
style D fill:#f3e5f5,stroke:#7b1fa2
🔍 Pilares e Propriedades Algorítmicas
Nesta unidade, exploramos formalmente: - Ponteiros Ant e Prox: Fundamento teórico indispensável para a correta aplicação computacional. - Navegação Bidirecional: Fundamento teórico indispensável para a correta aplicação computacional. - Remoção O(1) do Nó: Fundamento teórico indispensável para a correta aplicação computacional. - Lista Circular: Fundamento teórico indispensável para a correta aplicação computacional. - Escalonador Round-Robin: Fundamento teórico indispensável para a correta aplicação computacional.
🛠️ 2. Implementação Técnica em Linguagem C
Abaixo está o código de referência estruturado seguindo os padrões de boas práticas da linguagem C (ANSI C / C99), com gerenciamento dinâmico de memória e verificação de ponteiros nulos:
// Nó de Lista Duplamente Encadeada
typedef struct NoDuplo {
int valor;
struct NoDuplo* ant;
struct NoDuplo* prox;
} NoDuplo;
void lista_dupla_remover_no(NoDuplo** cabeca, NoDuplo* no) {
if (*cabeca == NULL || no == NULL) return;
if (*cabeca == no) *cabeca = no->prox;
if (no->prox != NULL) no->prox->ant = no->ant;
if (no->ant != NULL) no->ant->prox = no->prox;
free(no);
}
💡 Análise de Eficiência e Complexidade
- Complexidade Temporal: A implementação prioriza caminhos de execução diretos para atingir o menor custo assintótico possível.
- Gerenciamento de Memória: Toda alocação realizada na heap deve possuir uma rotina correspondente de liberação para assegurar vazamento zero de memória (zero memory leaks).
- Casos de Borda: Tratamento rigoroso de listas vazias, ponteiros nulos (
NULL) e estouros de capacidade.
🎯 3. Próximos Passos & Sequência Didática
-
Slides da Aula
-
Quiz de Fixação
-
Exercícios Práticos
-
Desafio de Projeto
Aula 08 - Pilhas (Stacks): Princípio LIFO e Aplicações 🧱
Objetivo Pedagógico
Objetivo: Estrutura Last-In First-Out (LIFO), operações push, pop, peek e isEmpty em O(1). Aplicações: avaliação de expressões em Notação Polonesa Reversa (RPN) e validação de parênteses.
📑 1. Fundamentos Teóricos & Análise Estrutural
Estrutura Last-In First-Out (LIFO), operações push, pop, peek e isEmpty em O(1). Aplicações: avaliação de expressões em Notação Polonesa Reversa (RPN) e validação de parênteses. O domínio desta estrutura de dados é primordial para o desenvolvimento de software escalável, onde o consumo de ciclos de CPU e a alocação de memória RAM na heap determinam a viabilidade operacional do sistema.
📐 Representação Abstrata & Mapeamento em Memória
graph LR
A["Entrada de Dados"] --> B["Pilhas (Stacks): Princípio LIFO e Aplicações"]
B --> C["Operação / Manipulação de Ponteiros"]
C --> D["Resultado / Complexidade Assintótica"]
style A fill:#e3f2fd,stroke:#1565c0
style B fill:#fff3e0,stroke:#e65100,stroke-width:2px
style C fill:#e8f5e9,stroke:#2e7d32
style D fill:#f3e5f5,stroke:#7b1fa2
🔍 Pilares e Propriedades Algorítmicas
Nesta unidade, exploramos formalmente: - Princípio LIFO: Fundamento teórico indispensável para a correta aplicação computacional. - Push e Pop O(1): Fundamento teórico indispensável para a correta aplicação computacional. - Stack Overflow: Fundamento teórico indispensável para a correta aplicação computacional. - Notação RPN: Fundamento teórico indispensável para a correta aplicação computacional. - Validação de Escopo: Fundamento teórico indispensável para a correta aplicação computacional.
🛠️ 2. Implementação Técnica em Linguagem C
Abaixo está o código de referência estruturado seguindo os padrões de boas práticas da linguagem C (ANSI C / C99), com gerenciamento dinâmico de memória e verificação de ponteiros nulos:
// Pilha Dinâmica LIFO
typedef struct {
int* itens;
int topo;
int capacidade;
} Pilha;
void pilha_push(Pilha* p, int valor) {
if (p->topo == p->capacidade - 1) return; // Cheia
p->itens[++p->topo] = valor;
}
int pilha_pop(Pilha* p) {
if (p->topo == -1) return -1; // Vazia
return p->itens[p->topo--];
}
💡 Análise de Eficiência e Complexidade
- Complexidade Temporal: A implementação prioriza caminhos de execução diretos para atingir o menor custo assintótico possível.
- Gerenciamento de Memória: Toda alocação realizada na heap deve possuir uma rotina correspondente de liberação para assegurar vazamento zero de memória (zero memory leaks).
- Casos de Borda: Tratamento rigoroso de listas vazias, ponteiros nulos (
NULL) e estouros de capacidade.
🎯 3. Próximos Passos & Sequência Didática
-
Slides da Aula
-
Quiz de Fixação
-
Exercícios Práticos
-
Desafio de Projeto
Aula 09 - Filas (Queues): Princípio FIFO, Fila Circular e Deque 🧱
Objetivo Pedagógico
Objetivo: Estrutura First-In First-Out (FIFO), operações enqueue e dequeue. Implementação de fila circular com array para evitar realocação contínua e filas de extremidade dupla (Deque).
📑 1. Fundamentos Teóricos & Análise Estrutural
Estrutura First-In First-Out (FIFO), operações enqueue e dequeue. Implementação de fila circular com array para evitar realocação contínua e filas de extremidade dupla (Deque). O domínio desta estrutura de dados é primordial para o desenvolvimento de software escalável, onde o consumo de ciclos de CPU e a alocação de memória RAM na heap determinam a viabilidade operacional do sistema.
📐 Representação Abstrata & Mapeamento em Memória
graph LR
A["Entrada de Dados"] --> B["Filas (Queues): Princípio FIFO, Fila Circular e Deque"]
B --> C["Operação / Manipulação de Ponteiros"]
C --> D["Resultado / Complexidade Assintótica"]
style A fill:#e3f2fd,stroke:#1565c0
style B fill:#fff3e0,stroke:#e65100,stroke-width:2px
style C fill:#e8f5e9,stroke:#2e7d32
style D fill:#f3e5f5,stroke:#7b1fa2
🔍 Pilares e Propriedades Algorítmicas
Nesta unidade, exploramos formalmente: - Princípio FIFO: Fundamento teórico indispensável para a correta aplicação computacional. - Enqueue e Dequeue O(1): Fundamento teórico indispensável para a correta aplicação computacional. - Fila Circular (% Módulo): Fundamento teórico indispensável para a correta aplicação computacional. - Filas de Impressão/Mensagens: Fundamento teórico indispensável para a correta aplicação computacional. - Deque: Fundamento teórico indispensável para a correta aplicação computacional.
🛠️ 2. Implementação Técnica em Linguagem C
Abaixo está o código de referência estruturado seguindo os padrões de boas práticas da linguagem C (ANSI C / C99), com gerenciamento dinâmico de memória e verificação de ponteiros nulos:
// Fila Circular em Array O(1)
#define CAP 8
typedef struct {
int dados[CAP];
int inicio, fim, total;
} FilaCircular;
bool fila_enqueue(FilaCircular* f, int valor) {
if (f->total == CAP) return false; // Fila cheia
f->dados[f->fim] = valor;
f->fim = (f->fim + 1) % CAP;
f->total++;
return true;
}
int fila_dequeue(FilaCircular* f) {
if (f->total == 0) return -1; // Fila vazia
int val = f->dados[f->inicio];
f->inicio = (f->inicio + 1) % CAP;
f->total--;
return val;
}
💡 Análise de Eficiência e Complexidade
- Complexidade Temporal: A implementação prioriza caminhos de execução diretos para atingir o menor custo assintótico possível.
- Gerenciamento de Memória: Toda alocação realizada na heap deve possuir uma rotina correspondente de liberação para assegurar vazamento zero de memória (zero memory leaks).
- Casos de Borda: Tratamento rigoroso de listas vazias, ponteiros nulos (
NULL) e estouros de capacidade.
🎯 3. Próximos Passos & Sequência Didática
-
Slides da Aula
-
Quiz de Fixação
-
Exercícios Práticos
-
Desafio de Projeto
Aula 10 - Recursão Aplicada, Pilha de Execução e Divisão e Conquista 🧱
Objetivo Pedagógico
Objetivo: Caso base e caso recursivo, funcionamento da Call Stack do sistema operacional, custo de memória de frames recursivos e técnica de eliminação de recursão em cauda.
📑 1. Fundamentos Teóricos & Análise Estrutural
Caso base e caso recursivo, funcionamento da Call Stack do sistema operacional, custo de memória de frames recursivos e técnica de eliminação de recursão em cauda. O domínio desta estrutura de dados é primordial para o desenvolvimento de software escalável, onde o consumo de ciclos de CPU e a alocação de memória RAM na heap determinam a viabilidade operacional do sistema.
📐 Representação Abstrata & Mapeamento em Memória
graph LR
A["Entrada de Dados"] --> B["Recursão Aplicada, Pilha de Execução e Divisão e Conquista"]
B --> C["Operação / Manipulação de Ponteiros"]
C --> D["Resultado / Complexidade Assintótica"]
style A fill:#e3f2fd,stroke:#1565c0
style B fill:#fff3e0,stroke:#e65100,stroke-width:2px
style C fill:#e8f5e9,stroke:#2e7d32
style D fill:#f3e5f5,stroke:#7b1fa2
🔍 Pilares e Propriedades Algorítmicas
Nesta unidade, exploramos formalmente: - Caso Base: Fundamento teórico indispensável para a correta aplicação computacional. - Caso Recursivo: Fundamento teórico indispensável para a correta aplicação computacional. - Call Stack: Fundamento teórico indispensável para a correta aplicação computacional. - Stack Overflow: Fundamento teórico indispensável para a correta aplicação computacional. - Recursão em Cauda (Tail Call): Fundamento teórico indispensável para a correta aplicação computacional.
🛠️ 2. Implementação Técnica em Linguagem C
Abaixo está o código de referência estruturado seguindo os padrões de boas práticas da linguagem C (ANSI C / C99), com gerenciamento dinâmico de memória e verificação de ponteiros nulos:
// Torre de Hanói - Recursão Clássica
#include <stdio.h>
void hanoi(int n, char origem, char destino, char auxiliar) {
if (n == 1) {
printf("Mover disco 1 de %c para %c\n", origem, destino);
return;
}
hanoi(n - 1, origem, auxiliar, destino);
printf("Mover disco %d de %c para %c\n", n, origem, destino);
hanoi(n - 1, auxiliar, destino, origem);
}
💡 Análise de Eficiência e Complexidade
- Complexidade Temporal: A implementação prioriza caminhos de execução diretos para atingir o menor custo assintótico possível.
- Gerenciamento de Memória: Toda alocação realizada na heap deve possuir uma rotina correspondente de liberação para assegurar vazamento zero de memória (zero memory leaks).
- Casos de Borda: Tratamento rigoroso de listas vazias, ponteiros nulos (
NULL) e estouros de capacidade.
🎯 3. Próximos Passos & Sequência Didática
-
Slides da Aula
-
Quiz de Fixação
-
Exercícios Práticos
-
Desafio de Projeto
Aula 11 - Algoritmos de Ordenação Elementares: Bubble, Selection e Insertion Sort 🧱
Objetivo Pedagógico
Objetivo: Mecanismos de ordenação quadrática O(n^2), estabilidade de algoritmos de ordenação, número de comparações vs trocas e desempenho do Insertion Sort em vetores quase ordenados.
📑 1. Fundamentos Teóricos & Análise Estrutural
Mecanismos de ordenação quadrática O(n^2), estabilidade de algoritmos de ordenação, número de comparações vs trocas e desempenho do Insertion Sort em vetores quase ordenados. O domínio desta estrutura de dados é primordial para o desenvolvimento de software escalável, onde o consumo de ciclos de CPU e a alocação de memória RAM na heap determinam a viabilidade operacional do sistema.
📐 Representação Abstrata & Mapeamento em Memória
graph LR
A["Entrada de Dados"] --> B["Algoritmos de Ordenação Elementares: Bubble, Selection e Insertion Sort"]
B --> C["Operação / Manipulação de Ponteiros"]
C --> D["Resultado / Complexidade Assintótica"]
style A fill:#e3f2fd,stroke:#1565c0
style B fill:#fff3e0,stroke:#e65100,stroke-width:2px
style C fill:#e8f5e9,stroke:#2e7d32
style D fill:#f3e5f5,stroke:#7b1fa2
🔍 Pilares e Propriedades Algorítmicas
Nesta unidade, exploramos formalmente: - Ordenação Quadrática O(n^2): Fundamento teórico indispensável para a correta aplicação computacional. - Estabilidade de Ordenação: Fundamento teórico indispensável para a correta aplicação computacional. - In-Place Sorting: Fundamento teórico indispensável para a correta aplicação computacional. - Comparação vs Troca: Fundamento teórico indispensável para a correta aplicação computacional. - Melhor Caso Adaptativo: Fundamento teórico indispensável para a correta aplicação computacional.
🛠️ 2. Implementação Técnica em Linguagem C
Abaixo está o código de referência estruturado seguindo os padrões de boas práticas da linguagem C (ANSI C / C99), com gerenciamento dinâmico de memória e verificação de ponteiros nulos:
// Insertion Sort O(n^2) Pior caso, O(n) Melhor caso estável
void insertion_sort(int arr[], int n) {
for (int i = 1; i < n; i++) {
int chave = arr[i];
int j = i - 1;
while (j >= 0 && arr[j] > chave) {
arr[j + 1] = arr[j];
j--;
}
arr[j + 1] = chave;
}
}
💡 Análise de Eficiência e Complexidade
- Complexidade Temporal: A implementação prioriza caminhos de execução diretos para atingir o menor custo assintótico possível.
- Gerenciamento de Memória: Toda alocação realizada na heap deve possuir uma rotina correspondente de liberação para assegurar vazamento zero de memória (zero memory leaks).
- Casos de Borda: Tratamento rigoroso de listas vazias, ponteiros nulos (
NULL) e estouros de capacidade.
🎯 3. Próximos Passos & Sequência Didática
-
Slides da Aula
-
Quiz de Fixação
-
Exercícios Práticos
-
Desafio de Projeto
Aula 12 - Algoritmos de Ordenação Eficientes: MergeSort e QuickSort 🧱
Objetivo Pedagógico
Objetivo: Paradigma de Divisão e Conquista, MergeSort estável com garantia O(n log n) e custo espacial O(n), QuickSort com partição de Hoare/Lomuto e escolha de pivô mediano.
📑 1. Fundamentos Teóricos & Análise Estrutural
Paradigma de Divisão e Conquista, MergeSort estável com garantia O(n log n) e custo espacial O(n), QuickSort com partição de Hoare/Lomuto e escolha de pivô mediano. O domínio desta estrutura de dados é primordial para o desenvolvimento de software escalável, onde o consumo de ciclos de CPU e a alocação de memória RAM na heap determinam a viabilidade operacional do sistema.
📐 Representação Abstrata & Mapeamento em Memória
graph LR
A["Entrada de Dados"] --> B["Algoritmos de Ordenação Eficientes: MergeSort e QuickSort"]
B --> C["Operação / Manipulação de Ponteiros"]
C --> D["Resultado / Complexidade Assintótica"]
style A fill:#e3f2fd,stroke:#1565c0
style B fill:#fff3e0,stroke:#e65100,stroke-width:2px
style C fill:#e8f5e9,stroke:#2e7d32
style D fill:#f3e5f5,stroke:#7b1fa2
🔍 Pilares e Propriedades Algorítmicas
Nesta unidade, exploramos formalmente: - Divisão e Conquista: Fundamento teórico indispensável para a correta aplicação computacional. - MergeSort O(n log n): Fundamento teórico indispensável para a correta aplicação computacional. - QuickSort In-Place: Fundamento teórico indispensável para a correta aplicação computacional. - Escolha do Pivô: Fundamento teórico indispensável para a correta aplicação computacional. - Complexidade Pior Caso O(n^2): Fundamento teórico indispensável para a correta aplicação computacional.
🛠️ 2. Implementação Técnica em Linguagem C
Abaixo está o código de referência estruturado seguindo os padrões de boas práticas da linguagem C (ANSI C / C99), com gerenciamento dinâmico de memória e verificação de ponteiros nulos:
// Partição de Lomuto para QuickSort O(n log n)
int particionar(int arr[], int baixo, int alto) {
int pivo = arr[alto];
int i = (baixo - 1);
for (int j = baixo; j < alto; j++) {
if (arr[j] <= pivo) {
i++;
int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp;
}
}
int temp = arr[i + 1]; arr[i + 1] = arr[alto]; arr[alto] = temp;
return (i + 1);
}
void quick_sort(int arr[], int baixo, int alto) {
if (baixo < alto) {
int pi = particionar(arr, baixo, alto);
quick_sort(arr, baixo, pi - 1);
quick_sort(arr, pi + 1, alto);
}
}
💡 Análise de Eficiência e Complexidade
- Complexidade Temporal: A implementação prioriza caminhos de execução diretos para atingir o menor custo assintótico possível.
- Gerenciamento de Memória: Toda alocação realizada na heap deve possuir uma rotina correspondente de liberação para assegurar vazamento zero de memória (zero memory leaks).
- Casos de Borda: Tratamento rigoroso de listas vazias, ponteiros nulos (
NULL) e estouros de capacidade.
🎯 3. Próximos Passos & Sequência Didática
-
Slides da Aula
-
Quiz de Fixação
-
Exercícios Práticos
-
Desafio de Projeto
Aula 13 - Árvores Binárias e Árvores de Busca Binária (BST) 🧱
Objetivo Pedagógico
Objetivo: Estrutura não-linear hierárquica, raiz, filhos, folhas, altura e profundidade. Inserção, busca e remoção em BST. Travessias Em-Ordem, Pré-Ordem e Pós-Ordem.
📑 1. Fundamentos Teóricos & Análise Estrutural
Estrutura não-linear hierárquica, raiz, filhos, folhas, altura e profundidade. Inserção, busca e remoção em BST. Travessias Em-Ordem, Pré-Ordem e Pós-Ordem. O domínio desta estrutura de dados é primordial para o desenvolvimento de software escalável, onde o consumo de ciclos de CPU e a alocação de memória RAM na heap determinam a viabilidade operacional do sistema.
📐 Representação Abstrata & Mapeamento em Memória
graph LR
A["Entrada de Dados"] --> B["Árvores Binárias e Árvores de Busca Binária (BST)"]
B --> C["Operação / Manipulação de Ponteiros"]
C --> D["Resultado / Complexidade Assintótica"]
style A fill:#e3f2fd,stroke:#1565c0
style B fill:#fff3e0,stroke:#e65100,stroke-width:2px
style C fill:#e8f5e9,stroke:#2e7d32
style D fill:#f3e5f5,stroke:#7b1fa2
🔍 Pilares e Propriedades Algorítmicas
Nesta unidade, exploramos formalmente: - Propriedade da BST: Fundamento teórico indispensável para a correta aplicação computacional. - Busca O(h): Fundamento teórico indispensável para a correta aplicação computacional. - Travessia Em-Ordem (Ordenada): Fundamento teórico indispensável para a correta aplicação computacional. - Pré-Ordem e Pós-Ordem: Fundamento teórico indispensável para a correta aplicação computacional. - Degeneração em Lista: Fundamento teórico indispensável para a correta aplicação computacional.
🛠️ 2. Implementação Técnica em Linguagem C
Abaixo está o código de referência estruturado seguindo os padrões de boas práticas da linguagem C (ANSI C / C99), com gerenciamento dinâmico de memória e verificação de ponteiros nulos:
// Árvore de Busca Binária (BST)
typedef struct NoBST {
int chave;
struct NoBST *esq, *dir;
} NoBST;
NoBST* bst_inserir(NoBST* raiz, int chave) {
if (raiz == NULL) {
NoBST* n = (NoBST*) malloc(sizeof(NoBST));
n->chave = chave; n->esq = n->dir = NULL;
return n;
}
if (chave < raiz->chave) raiz->esq = bst_inserir(raiz->esq, chave);
else if (chave > raiz->chave) raiz->dir = bst_inserir(raiz->dir, chave);
return raiz;
}
void bst_em_ordem(NoBST* raiz) {
if (raiz != NULL) {
bst_em_ordem(raiz->esq);
printf("%d ", raiz->chave);
bst_em_ordem(raiz->dir);
}
}
💡 Análise de Eficiência e Complexidade
- Complexidade Temporal: A implementação prioriza caminhos de execução diretos para atingir o menor custo assintótico possível.
- Gerenciamento de Memória: Toda alocação realizada na heap deve possuir uma rotina correspondente de liberação para assegurar vazamento zero de memória (zero memory leaks).
- Casos de Borda: Tratamento rigoroso de listas vazias, ponteiros nulos (
NULL) e estouros de capacidade.
🎯 3. Próximos Passos & Sequência Didática
-
Slides da Aula
-
Quiz de Fixação
-
Exercícios Práticos
-
Desafio de Projeto
Aula 14 - Tabelas Hash: Funções de Espalhamento e Resolução de Colisões 🧱
Objetivo Pedagógico
Objetivo: Mapeamento chave-valor em O(1) médio, funções hash (djb2, murmur), resolução de colisões por encadeamento externo (Separate Chaining) e endereçamento aberto (Linear Probing).
📑 1. Fundamentos Teóricos & Análise Estrutural
Mapeamento chave-valor em O(1) médio, funções hash (djb2, murmur), resolução de colisões por encadeamento externo (Separate Chaining) e endereçamento aberto (Linear Probing). O domínio desta estrutura de dados é primordial para o desenvolvimento de software escalável, onde o consumo de ciclos de CPU e a alocação de memória RAM na heap determinam a viabilidade operacional do sistema.
📐 Representação Abstrata & Mapeamento em Memória
graph LR
A["Entrada de Dados"] --> B["Tabelas Hash: Funções de Espalhamento e Resolução de Colisões"]
B --> C["Operação / Manipulação de Ponteiros"]
C --> D["Resultado / Complexidade Assintótica"]
style A fill:#e3f2fd,stroke:#1565c0
style B fill:#fff3e0,stroke:#e65100,stroke-width:2px
style C fill:#e8f5e9,stroke:#2e7d32
style D fill:#f3e5f5,stroke:#7b1fa2
🔍 Pilares e Propriedades Algorítmicas
Nesta unidade, exploramos formalmente: - Função Hash: Fundamento teórico indispensável para a correta aplicação computacional. - Colisão de Hash: Fundamento teórico indispensável para a correta aplicação computacional. - Encadeamento Separado: Fundamento teórico indispensável para a correta aplicação computacional. - Linear Probing: Fundamento teórico indispensável para a correta aplicação computacional. - Fator de Carga (Load Factor): Fundamento teórico indispensável para a correta aplicação computacional.
🛠️ 2. Implementação Técnica em Linguagem C
Abaixo está o código de referência estruturado seguindo os padrões de boas práticas da linguagem C (ANSI C / C99), com gerenciamento dinâmico de memória e verificação de ponteiros nulos:
// Função Hash djb2 para Strings
unsigned long hash_djb2(const unsigned char *str) {
unsigned long hash = 5381;
int c;
while ((c = *str++))
hash = ((hash << 5) + hash) + c; /* hash * 33 + c */
return hash;
}
💡 Análise de Eficiência e Complexidade
- Complexidade Temporal: A implementação prioriza caminhos de execução diretos para atingir o menor custo assintótico possível.
- Gerenciamento de Memória: Toda alocação realizada na heap deve possuir uma rotina correspondente de liberação para assegurar vazamento zero de memória (zero memory leaks).
- Casos de Borda: Tratamento rigoroso de listas vazias, ponteiros nulos (
NULL) e estouros de capacidade.
🎯 3. Próximos Passos & Sequência Didática
-
Slides da Aula
-
Quiz de Fixação
-
Exercícios Práticos
-
Desafio de Projeto
Aula 15 - Heaps Binários e Filas de Prioridade (Priority Queues) 🧱
Objetivo Pedagógico
Objetivo: Propriedade de heap (Min-Heap e Max-Heap), representação compacta em vetor contíguo (pai = i/2, filhos = 2i e 2i+1), operações heapify, inserção e extração em O(log n), e algoritmo HeapSort.
📑 1. Fundamentos Teóricos & Análise Estrutural
Propriedade de heap (Min-Heap e Max-Heap), representação compacta em vetor contíguo (pai = i/2, filhos = 2i e 2i+1), operações heapify, inserção e extração em O(log n), e algoritmo HeapSort. O domínio desta estrutura de dados é primordial para o desenvolvimento de software escalável, onde o consumo de ciclos de CPU e a alocação de memória RAM na heap determinam a viabilidade operacional do sistema.
📐 Representação Abstrata & Mapeamento em Memória
graph LR
A["Entrada de Dados"] --> B["Heaps Binários e Filas de Prioridade (Priority Queues)"]
B --> C["Operação / Manipulação de Ponteiros"]
C --> D["Resultado / Complexidade Assintótica"]
style A fill:#e3f2fd,stroke:#1565c0
style B fill:#fff3e0,stroke:#e65100,stroke-width:2px
style C fill:#e8f5e9,stroke:#2e7d32
style D fill:#f3e5f5,stroke:#7b1fa2
🔍 Pilares e Propriedades Algorítmicas
Nesta unidade, exploramos formalmente: - Max-Heap e Min-Heap: Fundamento teórico indispensável para a correta aplicação computacional. - Fila de Prioridade: Fundamento teórico indispensável para a correta aplicação computacional. - Heapify O(log n): Fundamento teórico indispensável para a correta aplicação computacional. - HeapSort O(n log n): Fundamento teórico indispensável para a correta aplicação computacional. - Representação Vetorial: Fundamento teórico indispensável para a correta aplicação computacional.
🛠️ 2. Implementação Técnica em Linguagem C
Abaixo está o código de referência estruturado seguindo os padrões de boas práticas da linguagem C (ANSI C / C99), com gerenciamento dinâmico de memória e verificação de ponteiros nulos:
// Max-Heapify em Vetor
void heapify(int arr[], int n, int i) {
int maior = i;
int esq = 2 * i + 1;
int dir = 2 * i + 2;
if (esq < n && arr[esq] > arr[maior]) maior = esq;
if (dir < n && arr[dir] > arr[maior]) maior = dir;
if (maior != i) {
int temp = arr[i]; arr[i] = arr[maior]; arr[maior] = temp;
heapify(arr, n, maior);
}
}
💡 Análise de Eficiência e Complexidade
- Complexidade Temporal: A implementação prioriza caminhos de execução diretos para atingir o menor custo assintótico possível.
- Gerenciamento de Memória: Toda alocação realizada na heap deve possuir uma rotina correspondente de liberação para assegurar vazamento zero de memória (zero memory leaks).
- Casos de Borda: Tratamento rigoroso de listas vazias, ponteiros nulos (
NULL) e estouros de capacidade.
🎯 3. Próximos Passos & Sequência Didática
-
Slides da Aula
-
Quiz de Fixação
-
Exercícios Práticos
-
Desafio de Projeto
Aula 16 - Introdução aos Grafos: Representação e Algoritmos de Busca 🧱
Objetivo Pedagógico
Objetivo: Conceito de vértices, arestas direcionadas e ponderadas. Representação computacional: Matriz de Adjacência vs Lista de Adjacência. Busca em Largura (BFS) e Busca em Profundidade (DFS).
📑 1. Fundamentos Teóricos & Análise Estrutural
Conceito de vértices, arestas direcionadas e ponderadas. Representação computacional: Matriz de Adjacência vs Lista de Adjacência. Busca em Largura (BFS) e Busca em Profundidade (DFS). O domínio desta estrutura de dados é primordial para o desenvolvimento de software escalável, onde o consumo de ciclos de CPU e a alocação de memória RAM na heap determinam a viabilidade operacional do sistema.
📐 Representação Abstrata & Mapeamento em Memória
graph LR
A["Entrada de Dados"] --> B["Introdução aos Grafos: Representação e Algoritmos de Busca"]
B --> C["Operação / Manipulação de Ponteiros"]
C --> D["Resultado / Complexidade Assintótica"]
style A fill:#e3f2fd,stroke:#1565c0
style B fill:#fff3e0,stroke:#e65100,stroke-width:2px
style C fill:#e8f5e9,stroke:#2e7d32
style D fill:#f3e5f5,stroke:#7b1fa2
🔍 Pilares e Propriedades Algorítmicas
Nesta unidade, exploramos formalmente: - Vértices e Arestas: Fundamento teórico indispensável para a correta aplicação computacional. - Matriz vs Lista de Adjacência: Fundamento teórico indispensável para a correta aplicação computacional. - Busca em Largura (BFS): Fundamento teórico indispensável para a correta aplicação computacional. - Busca em Profundidade (DFS): Fundamento teórico indispensável para a correta aplicação computacional. - Detecção de Ciclos: Fundamento teórico indispensável para a correta aplicação computacional.
🛠️ 2. Implementação Técnica em Linguagem C
Abaixo está o código de referência estruturado seguindo os padrões de boas práticas da linguagem C (ANSI C / C99), com gerenciamento dinâmico de memória e verificação de ponteiros nulos:
// Busca em Profundidade (DFS) em Grafo com Lista de Adjacência
void dfs_util(int v, bool visitados[], const ListaAdj* grafo) {
visitados[v] = true;
printf("%d ", v);
for (NoVizinho* viz = grafo->adj[v]; viz != NULL; viz = viz->prox) {
if (!visitados[viz->destino]) {
dfs_util(viz->destino, visitados, grafo);
}
}
}
💡 Análise de Eficiência e Complexidade
- Complexidade Temporal: A implementação prioriza caminhos de execução diretos para atingir o menor custo assintótico possível.
- Gerenciamento de Memória: Toda alocação realizada na heap deve possuir uma rotina correspondente de liberação para assegurar vazamento zero de memória (zero memory leaks).
- Casos de Borda: Tratamento rigoroso de listas vazias, ponteiros nulos (
NULL) e estouros de capacidade.
🎯 3. Próximos Passos & Sequência Didática
-
Slides da Aula
-
Quiz de Fixação
-
Exercícios Práticos
-
Desafio de Projeto
Aula 17 - Árvores Balanceadas: Árvore AVL e Rotações 🧱
Objetivo Pedagógico
Objetivo: Problema da degeneração da BST. Fator de Balanceamento (FB = altura(esq) - altura(dir)), rotações simples (RSE, RSD) e rotações duplas (RDE, RDD) para garantir busca, inserção e remoção em O(log n).
📑 1. Fundamentos Teóricos & Análise Estrutural
Problema da degeneração da BST. Fator de Balanceamento (FB = altura(esq) - altura(dir)), rotações simples (RSE, RSD) e rotações duplas (RDE, RDD) para garantir busca, inserção e remoção em O(log n). O domínio desta estrutura de dados é primordial para o desenvolvimento de software escalável, onde o consumo de ciclos de CPU e a alocação de memória RAM na heap determinam a viabilidade operacional do sistema.
📐 Representação Abstrata & Mapeamento em Memória
graph LR
A["Entrada de Dados"] --> B["Árvores Balanceadas: Árvore AVL e Rotações"]
B --> C["Operação / Manipulação de Ponteiros"]
C --> D["Resultado / Complexidade Assintótica"]
style A fill:#e3f2fd,stroke:#1565c0
style B fill:#fff3e0,stroke:#e65100,stroke-width:2px
style C fill:#e8f5e9,stroke:#2e7d32
style D fill:#f3e5f5,stroke:#7b1fa2
🔍 Pilares e Propriedades Algorítmicas
Nesta unidade, exploramos formalmente: - Fator de Balanceamento: Fundamento teórico indispensável para a correta aplicação computacional. - Rotação Simples e Dupla: Fundamento teórico indispensável para a correta aplicação computacional. - Garantia O(log n): Fundamento teórico indispensável para a correta aplicação computacional. - Árvore AVL: Fundamento teórico indispensável para a correta aplicação computacional. - Árvore Rubro-Negra: Fundamento teórico indispensável para a correta aplicação computacional.
🛠️ 2. Implementação Técnica em Linguagem C
Abaixo está o código de referência estruturado seguindo os padrões de boas práticas da linguagem C (ANSI C / C99), com gerenciamento dinâmico de memória e verificação de ponteiros nulos:
// Rotação Simples à Direita (RSD) em AVL
NoAVL* rotacao_direita(NoAVL* y) {
NoAVL* x = y->esq;
NoAVL* T2 = x->dir;
x->dir = y;
y->esq = T2;
y->altura = 1 + max(altura(y->esq), altura(y->dir));
x->altura = 1 + max(altura(x->esq), altura(x->dir));
return x; // Nova raiz da subárvore
}
💡 Análise de Eficiência e Complexidade
- Complexidade Temporal: A implementação prioriza caminhos de execução diretos para atingir o menor custo assintótico possível.
- Gerenciamento de Memória: Toda alocação realizada na heap deve possuir uma rotina correspondente de liberação para assegurar vazamento zero de memória (zero memory leaks).
- Casos de Borda: Tratamento rigoroso de listas vazias, ponteiros nulos (
NULL) e estouros de capacidade.
🎯 3. Próximos Passos & Sequência Didática
-
Slides da Aula
-
Quiz de Fixação
-
Exercícios Práticos
-
Desafio de Projeto
Aula 18 - Estruturas Avançadas de Busca: Árvores Trie e Busca de Prefixos 🧱
Objetivo Pedagógico
Objetivo: Árvores de prefixos (Trie / Prefix Tree), nós com tabela de ponteiros para caracteres do alfabeto, inserção e busca de palavras em O(k), onde k é o comprimento da chave. Aplicação em autocompletar e dicionários.
📑 1. Fundamentos Teóricos & Análise Estrutural
Árvores de prefixos (Trie / Prefix Tree), nós com tabela de ponteiros para caracteres do alfabeto, inserção e busca de palavras em O(k), onde k é o comprimento da chave. Aplicação em autocompletar e dicionários. O domínio desta estrutura de dados é primordial para o desenvolvimento de software escalável, onde o consumo de ciclos de CPU e a alocação de memória RAM na heap determinam a viabilidade operacional do sistema.
📐 Representação Abstrata & Mapeamento em Memória
graph LR
A["Entrada de Dados"] --> B["Estruturas Avançadas de Busca: Árvores Trie e Busca de Prefixos"]
B --> C["Operação / Manipulação de Ponteiros"]
C --> D["Resultado / Complexidade Assintótica"]
style A fill:#e3f2fd,stroke:#1565c0
style B fill:#fff3e0,stroke:#e65100,stroke-width:2px
style C fill:#e8f5e9,stroke:#2e7d32
style D fill:#f3e5f5,stroke:#7b1fa2
🔍 Pilares e Propriedades Algorítmicas
Nesta unidade, exploramos formalmente: - Árvore Trie: Fundamento teórico indispensável para a correta aplicação computacional. - Busca por Prefixo O(k): Fundamento teórico indispensável para a correta aplicação computacional. - Autocompletar: Fundamento teórico indispensável para a correta aplicação computacional. - Dicionário em Memória: Fundamento teórico indispensável para a correta aplicação computacional. - Radix Tree: Fundamento teórico indispensável para a correta aplicação computacional.
🛠️ 2. Implementação Técnica em Linguagem C
Abaixo está o código de referência estruturado seguindo os padrões de boas práticas da linguagem C (ANSI C / C99), com gerenciamento dinâmico de memória e verificação de ponteiros nulos:
// Estrutura do Nó de Árvore Trie (Alfabeto ASCII minúsculo)
#define ALPHABET_SIZE 26
typedef struct TrieNode {
struct TrieNode *filhos[ALPHABET_SIZE];
bool fim_de_palavra;
} TrieNode;
void trie_inserir(TrieNode *raiz, const char *chave) {
TrieNode *atual = raiz;
for (int i = 0; chave[i] != '\0'; i++) {
int indice = chave[i] - 'a';
if (!atual->filhos[indice])
atual->filhos[indice] = (TrieNode*) calloc(1, sizeof(TrieNode));
atual = atual->filhos[indice];
}
atual->fim_de_palavra = true;
}
💡 Análise de Eficiência e Complexidade
- Complexidade Temporal: A implementação prioriza caminhos de execução diretos para atingir o menor custo assintótico possível.
- Gerenciamento de Memória: Toda alocação realizada na heap deve possuir uma rotina correspondente de liberação para assegurar vazamento zero de memória (zero memory leaks).
- Casos de Borda: Tratamento rigoroso de listas vazias, ponteiros nulos (
NULL) e estouros de capacidade.
🎯 3. Próximos Passos & Sequência Didática
-
Slides da Aula
-
Quiz de Fixação
-
Exercícios Práticos
-
Desafio de Projeto
Aula 19 - Algoritmos de Menor Caminho em Grafos: Dijkstra e Fila de Prioridade 🧱
Objetivo Pedagógico
Objetivo: Problema do menor caminho com pesos não-negativos, algoritmo guloso de Dijkstra otimizado com Min-Heap / Priority Queue para complexidade O((V + E) log V), relaxamento de arestas e vetor de distâncias.
📑 1. Fundamentos Teóricos & Análise Estrutural
Problema do menor caminho com pesos não-negativos, algoritmo guloso de Dijkstra otimizado com Min-Heap / Priority Queue para complexidade O((V + E) log V), relaxamento de arestas e vetor de distâncias. O domínio desta estrutura de dados é primordial para o desenvolvimento de software escalável, onde o consumo de ciclos de CPU e a alocação de memória RAM na heap determinam a viabilidade operacional do sistema.
📐 Representação Abstrata & Mapeamento em Memória
graph LR
A["Entrada de Dados"] --> B["Algoritmos de Menor Caminho em Grafos: Dijkstra e Fila de Prioridade"]
B --> C["Operação / Manipulação de Ponteiros"]
C --> D["Resultado / Complexidade Assintótica"]
style A fill:#e3f2fd,stroke:#1565c0
style B fill:#fff3e0,stroke:#e65100,stroke-width:2px
style C fill:#e8f5e9,stroke:#2e7d32
style D fill:#f3e5f5,stroke:#7b1fa2
🔍 Pilares e Propriedades Algorítmicas
Nesta unidade, exploramos formalmente: - Algoritmo de Dijkstra: Fundamento teórico indispensável para a correta aplicação computacional. - Relaxamento de Arestas: Fundamento teórico indispensável para a correta aplicação computacional. - Min-Heap Optimization: Fundamento teórico indispensável para a correta aplicação computacional. - Grafo Ponderado: Fundamento teórico indispensável para a correta aplicação computacional. - Roteamento e GPS: Fundamento teórico indispensável para a correta aplicação computacional.
🛠️ 2. Implementação Técnica em Linguagem C
Abaixo está o código de referência estruturado seguindo os padrões de boas práticas da linguagem C (ANSI C / C99), com gerenciamento dinâmico de memória e verificação de ponteiros nulos:
// Relaxamento de aresta no Algoritmo de Dijkstra
void relaxar(int u, int v, int peso, int dist[], int anterior[], MinHeap* pq) {
if (dist[v] > dist[u] + peso) {
dist[v] = dist[u] + peso;
anterior[v] = u;
min_heap_diminuir_chave(pq, v, dist[v]);
}
}
💡 Análise de Eficiência e Complexidade
- Complexidade Temporal: A implementação prioriza caminhos de execução diretos para atingir o menor custo assintótico possível.
- Gerenciamento de Memória: Toda alocação realizada na heap deve possuir uma rotina correspondente de liberação para assegurar vazamento zero de memória (zero memory leaks).
- Casos de Borda: Tratamento rigoroso de listas vazias, ponteiros nulos (
NULL) e estouros de capacidade.
🎯 3. Próximos Passos & Sequência Didática
-
Slides da Aula
-
Quiz de Fixação
-
Exercícios Práticos
-
Desafio de Projeto
Aula 20 - Projeto Capstone: Motor de Indexação e Busca Rápida em Memória 🧱
Objetivo Pedagógico
Objetivo: Projeto integrador final: implementação em C de um mecanismo de busca em memória consolidando Tabela Hash (índice invertido), Árvore Trie (autocompletar) e Min-Heap (ranking de relevância).
📑 1. Fundamentos Teóricos & Análise Estrutural
Projeto integrador final: implementação em C de um mecanismo de busca em memória consolidando Tabela Hash (índice invertido), Árvore Trie (autocompletar) e Min-Heap (ranking de relevância). O domínio desta estrutura de dados é primordial para o desenvolvimento de software escalável, onde o consumo de ciclos de CPU e a alocação de memória RAM na heap determinam a viabilidade operacional do sistema.
📐 Representação Abstrata & Mapeamento em Memória
graph LR
A["Entrada de Dados"] --> B["Projeto Capstone: Motor de Indexação e Busca Rápida em Memória"]
B --> C["Operação / Manipulação de Ponteiros"]
C --> D["Resultado / Complexidade Assintótica"]
style A fill:#e3f2fd,stroke:#1565c0
style B fill:#fff3e0,stroke:#e65100,stroke-width:2px
style C fill:#e8f5e9,stroke:#2e7d32
style D fill:#f3e5f5,stroke:#7b1fa2
🔍 Pilares e Propriedades Algorítmicas
Nesta unidade, exploramos formalmente: - Índice Invertido: Fundamento teórico indispensável para a correta aplicação computacional. - Motor de Busca em Memória: Fundamento teórico indispensável para a correta aplicação computacional. - Integração Multiestrutura: Fundamento teórico indispensável para a correta aplicação computacional. - Desempenho Crítico: Fundamento teórico indispensável para a correta aplicação computacional. - Engenharia de Software em C: Fundamento teórico indispensável para a correta aplicação computacional.
🛠️ 2. Implementação Técnica em Linguagem C
Abaixo está o código de referência estruturado seguindo os padrões de boas práticas da linguagem C (ANSI C / C99), com gerenciamento dinâmico de memória e verificação de ponteiros nulos:
// Arquitetura Integrada do Motor de Busca em Memória
typedef struct {
TrieNode* dicionario_prefixos; // Autocompletar rápido
TabelaHash* indice_invertido; // Mapeamento termo -> lista de documentos
MinHeap* ranking_relevancia; // Ordenação dos top-k resultados
} MotorDeBusca;
void motor_inicializar(MotorDeBusca* motor) {
motor->dicionario_prefixos = (TrieNode*) calloc(1, sizeof(TrieNode));
motor->indice_invertido = hash_criar(10007);
motor->ranking_relevancia = heap_criar(100);
}
💡 Análise de Eficiência e Complexidade
- Complexidade Temporal: A implementação prioriza caminhos de execução diretos para atingir o menor custo assintótico possível.
- Gerenciamento de Memória: Toda alocação realizada na heap deve possuir uma rotina correspondente de liberação para assegurar vazamento zero de memória (zero memory leaks).
- Casos de Borda: Tratamento rigoroso de listas vazias, ponteiros nulos (
NULL) e estouros de capacidade.
🎯 3. Próximos Passos & Sequência Didática
-
Slides da Aula
-
Quiz de Fixação
-
Exercícios Práticos
-
Desafio de Projeto
Exercícios
🏋️ Exercícios do Curso
Lista completa das 20 unidades de exercicios organizadas em 5 módulos didáticos.
-
Módulo 1: Fundamentos (01 a 04) ---
-
Módulo 2: Conceitos Essenciais (05 a 08) ---
-
Módulo 3: Aplicação Prática (09 a 12) ---
-
Módulo 4: Padrões e Ferramentas (13 a 16) ---
-
Módulo 5: Avançado e Capstone (17 a 20) ---
Exercícios da Aula 01: Introdução às Estruturas de Dados e Tipos Abstratos de Dados (TAD) 🏋️
Instruções de Estudo
Resolva os exercícios propostos implementando o código em C puro. Teste seus programas compilando com gcc -Wall -Wextra -std=c99. Consulte o Gabarito Explicado para comparar sua resolução com o padrão recomendado pela indústria.
🟢 Nível 1: Básico (Conceitual e Sintaxe)
- Defina formalmente o que é Introdução às Estruturas de Dados e Tipos Abstratos de Dados (TAD) e qual o seu principal caso de uso no desenvolvimento de software.
- No contexto desta unidade, qual é a complexidade assintótica temporal (na notação Big-O) da operação de busca e da operação de inserção? Justifique.
🟡 Nível 2: Intermediário (Implementação e Ponteiros)
- Implemente uma função em C que receba a estrutura de Introdução às Estruturas de Dados e Tipos Abstratos de Dados (TAD) e verifique se ela se encontra vazia ou íntegra.
- Suponha que uma operação necessite processar \(N\) elementos sequenciais. Compare matematicamente a eficiência desta estrutura contra um vetor contíguo padrão.
🔴 Nível 3: Desafio Técnico (Algoritmos e Otimização)
- Escreva uma função completa em C com tratamento de exceção de ponteiro nulo para a operação crítica de Introdução às Estruturas de Dados e Tipos Abstratos de Dados (TAD), garantindo que não ocorra vazamento de memória sob nenhuma condição.
📚 Gabarito e Soluções Comentadas
Gabarito Explicado
### Questão 1: Conceito e Aplicação - **Fundamentação:** A estrutura **Introdução às Estruturas de Dados e Tipos Abstratos de Dados (TAD)** organiza a informação na memória permitindo otimização de acesso e manipulação segundo regras determinísticas de invariância de dados. - **Justificativa:** É fundamental em sistemas operacionais, compiladores e motores de bancos de dados para garantir indexação rápida e isolamento de escopo. ### Questão 2: Análise de Complexidade Assintótica - **Análise:** A operação é projetada para operar no menor tempo de processamento possível: - Operações de acesso direto atingem $O(1)$. - Operações de busca em estruturas sequenciais requerem $O(n)$ no pior caso. - Operações em estruturas balanceadas garantem $O(\log n)$. ### Questão 3: Verificação de Integridade e Vazio#include <stdbool.h>
#include <stdlib.h>
bool estrutura_esta_vazia(const void* estrutura) {
return (estrutura == NULL);
}
// Implementação profissional de Introdução às Estruturas de Dados e Tipos Abstratos de Dados (TAD)
#include <stdio.h>
#include <stdlib.h>
int executar_desafio_01(void) {
// 1. Alocação segura
void* ptr = malloc(64);
if (ptr == NULL) {
return -1; // Falha de alocação tratada
}
// 2. Processamento dos dados
// ...
// 3. Liberação obrigatória
free(ptr);
ptr = NULL;
return 0; // Sucesso
}
Exercícios da Aula 02: Ponteiros, Alocação Dinâmica e Gestão de Memória na Heap 🏋️
Instruções de Estudo
Resolva os exercícios propostos implementando o código em C puro. Teste seus programas compilando com gcc -Wall -Wextra -std=c99. Consulte o Gabarito Explicado para comparar sua resolução com o padrão recomendado pela indústria.
🟢 Nível 1: Básico (Conceitual e Sintaxe)
- Defina formalmente o que é Ponteiros, Alocação Dinâmica e Gestão de Memória na Heap e qual o seu principal caso de uso no desenvolvimento de software.
- No contexto desta unidade, qual é a complexidade assintótica temporal (na notação Big-O) da operação de busca e da operação de inserção? Justifique.
🟡 Nível 2: Intermediário (Implementação e Ponteiros)
- Implemente uma função em C que receba a estrutura de Ponteiros, Alocação Dinâmica e Gestão de Memória na Heap e verifique se ela se encontra vazia ou íntegra.
- Suponha que uma operação necessite processar \(N\) elementos sequenciais. Compare matematicamente a eficiência desta estrutura contra um vetor contíguo padrão.
🔴 Nível 3: Desafio Técnico (Algoritmos e Otimização)
- Escreva uma função completa em C com tratamento de exceção de ponteiro nulo para a operação crítica de Ponteiros, Alocação Dinâmica e Gestão de Memória na Heap, garantindo que não ocorra vazamento de memória sob nenhuma condição.
📚 Gabarito e Soluções Comentadas
Gabarito Explicado
### Questão 1: Conceito e Aplicação - **Fundamentação:** A estrutura **Ponteiros, Alocação Dinâmica e Gestão de Memória na Heap** organiza a informação na memória permitindo otimização de acesso e manipulação segundo regras determinísticas de invariância de dados. - **Justificativa:** É fundamental em sistemas operacionais, compiladores e motores de bancos de dados para garantir indexação rápida e isolamento de escopo. ### Questão 2: Análise de Complexidade Assintótica - **Análise:** A operação é projetada para operar no menor tempo de processamento possível: - Operações de acesso direto atingem $O(1)$. - Operações de busca em estruturas sequenciais requerem $O(n)$ no pior caso. - Operações em estruturas balanceadas garantem $O(\log n)$. ### Questão 3: Verificação de Integridade e Vazio#include <stdbool.h>
#include <stdlib.h>
bool estrutura_esta_vazia(const void* estrutura) {
return (estrutura == NULL);
}
// Implementação profissional de Ponteiros, Alocação Dinâmica e Gestão de Memória na Heap
#include <stdio.h>
#include <stdlib.h>
int executar_desafio_02(void) {
// 1. Alocação segura
void* ptr = malloc(64);
if (ptr == NULL) {
return -1; // Falha de alocação tratada
}
// 2. Processamento dos dados
// ...
// 3. Liberação obrigatória
free(ptr);
ptr = NULL;
return 0; // Sucesso
}
Exercícios da Aula 03: Vetores Dinâmicos e Redimensionamento Amortizado 🏋️
Instruções de Estudo
Resolva os exercícios propostos implementando o código em C puro. Teste seus programas compilando com gcc -Wall -Wextra -std=c99. Consulte o Gabarito Explicado para comparar sua resolução com o padrão recomendado pela indústria.
🟢 Nível 1: Básico (Conceitual e Sintaxe)
- Defina formalmente o que é Vetores Dinâmicos e Redimensionamento Amortizado e qual o seu principal caso de uso no desenvolvimento de software.
- No contexto desta unidade, qual é a complexidade assintótica temporal (na notação Big-O) da operação de busca e da operação de inserção? Justifique.
🟡 Nível 2: Intermediário (Implementação e Ponteiros)
- Implemente uma função em C que receba a estrutura de Vetores Dinâmicos e Redimensionamento Amortizado e verifique se ela se encontra vazia ou íntegra.
- Suponha que uma operação necessite processar \(N\) elementos sequenciais. Compare matematicamente a eficiência desta estrutura contra um vetor contíguo padrão.
🔴 Nível 3: Desafio Técnico (Algoritmos e Otimização)
- Escreva uma função completa em C com tratamento de exceção de ponteiro nulo para a operação crítica de Vetores Dinâmicos e Redimensionamento Amortizado, garantindo que não ocorra vazamento de memória sob nenhuma condição.
📚 Gabarito e Soluções Comentadas
Gabarito Explicado
### Questão 1: Conceito e Aplicação - **Fundamentação:** A estrutura **Vetores Dinâmicos e Redimensionamento Amortizado** organiza a informação na memória permitindo otimização de acesso e manipulação segundo regras determinísticas de invariância de dados. - **Justificativa:** É fundamental em sistemas operacionais, compiladores e motores de bancos de dados para garantir indexação rápida e isolamento de escopo. ### Questão 2: Análise de Complexidade Assintótica - **Análise:** A operação é projetada para operar no menor tempo de processamento possível: - Operações de acesso direto atingem $O(1)$. - Operações de busca em estruturas sequenciais requerem $O(n)$ no pior caso. - Operações em estruturas balanceadas garantem $O(\log n)$. ### Questão 3: Verificação de Integridade e Vazio#include <stdbool.h>
#include <stdlib.h>
bool estrutura_esta_vazia(const void* estrutura) {
return (estrutura == NULL);
}
// Implementação profissional de Vetores Dinâmicos e Redimensionamento Amortizado
#include <stdio.h>
#include <stdlib.h>
int executar_desafio_03(void) {
// 1. Alocação segura
void* ptr = malloc(64);
if (ptr == NULL) {
return -1; // Falha de alocação tratada
}
// 2. Processamento dos dados
// ...
// 3. Liberação obrigatória
free(ptr);
ptr = NULL;
return 0; // Sucesso
}
Exercícios da Aula 04: Matrizes e Mapeamento Linear na Memória 🏋️
Instruções de Estudo
Resolva os exercícios propostos implementando o código em C puro. Teste seus programas compilando com gcc -Wall -Wextra -std=c99. Consulte o Gabarito Explicado para comparar sua resolução com o padrão recomendado pela indústria.
🟢 Nível 1: Básico (Conceitual e Sintaxe)
- Defina formalmente o que é Matrizes e Mapeamento Linear na Memória e qual o seu principal caso de uso no desenvolvimento de software.
- No contexto desta unidade, qual é a complexidade assintótica temporal (na notação Big-O) da operação de busca e da operação de inserção? Justifique.
🟡 Nível 2: Intermediário (Implementação e Ponteiros)
- Implemente uma função em C que receba a estrutura de Matrizes e Mapeamento Linear na Memória e verifique se ela se encontra vazia ou íntegra.
- Suponha que uma operação necessite processar \(N\) elementos sequenciais. Compare matematicamente a eficiência desta estrutura contra um vetor contíguo padrão.
🔴 Nível 3: Desafio Técnico (Algoritmos e Otimização)
- Escreva uma função completa em C com tratamento de exceção de ponteiro nulo para a operação crítica de Matrizes e Mapeamento Linear na Memória, garantindo que não ocorra vazamento de memória sob nenhuma condição.
📚 Gabarito e Soluções Comentadas
Gabarito Explicado
### Questão 1: Conceito e Aplicação - **Fundamentação:** A estrutura **Matrizes e Mapeamento Linear na Memória** organiza a informação na memória permitindo otimização de acesso e manipulação segundo regras determinísticas de invariância de dados. - **Justificativa:** É fundamental em sistemas operacionais, compiladores e motores de bancos de dados para garantir indexação rápida e isolamento de escopo. ### Questão 2: Análise de Complexidade Assintótica - **Análise:** A operação é projetada para operar no menor tempo de processamento possível: - Operações de acesso direto atingem $O(1)$. - Operações de busca em estruturas sequenciais requerem $O(n)$ no pior caso. - Operações em estruturas balanceadas garantem $O(\log n)$. ### Questão 3: Verificação de Integridade e Vazio#include <stdbool.h>
#include <stdlib.h>
bool estrutura_esta_vazia(const void* estrutura) {
return (estrutura == NULL);
}
// Implementação profissional de Matrizes e Mapeamento Linear na Memória
#include <stdio.h>
#include <stdlib.h>
int executar_desafio_04(void) {
// 1. Alocação segura
void* ptr = malloc(64);
if (ptr == NULL) {
return -1; // Falha de alocação tratada
}
// 2. Processamento dos dados
// ...
// 3. Liberação obrigatória
free(ptr);
ptr = NULL;
return 0; // Sucesso
}
Exercícios da Aula 05: Análise Assintótica de Complexidade (Notação Big-O) 🏋️
Instruções de Estudo
Resolva os exercícios propostos implementando o código em C puro. Teste seus programas compilando com gcc -Wall -Wextra -std=c99. Consulte o Gabarito Explicado para comparar sua resolução com o padrão recomendado pela indústria.
🟢 Nível 1: Básico (Conceitual e Sintaxe)
- Defina formalmente o que é Análise Assintótica de Complexidade (Notação Big-O) e qual o seu principal caso de uso no desenvolvimento de software.
- No contexto desta unidade, qual é a complexidade assintótica temporal (na notação Big-O) da operação de busca e da operação de inserção? Justifique.
🟡 Nível 2: Intermediário (Implementação e Ponteiros)
- Implemente uma função em C que receba a estrutura de Análise Assintótica de Complexidade (Notação Big-O) e verifique se ela se encontra vazia ou íntegra.
- Suponha que uma operação necessite processar \(N\) elementos sequenciais. Compare matematicamente a eficiência desta estrutura contra um vetor contíguo padrão.
🔴 Nível 3: Desafio Técnico (Algoritmos e Otimização)
- Escreva uma função completa em C com tratamento de exceção de ponteiro nulo para a operação crítica de Análise Assintótica de Complexidade (Notação Big-O), garantindo que não ocorra vazamento de memória sob nenhuma condição.
📚 Gabarito e Soluções Comentadas
Gabarito Explicado
### Questão 1: Conceito e Aplicação - **Fundamentação:** A estrutura **Análise Assintótica de Complexidade (Notação Big-O)** organiza a informação na memória permitindo otimização de acesso e manipulação segundo regras determinísticas de invariância de dados. - **Justificativa:** É fundamental em sistemas operacionais, compiladores e motores de bancos de dados para garantir indexação rápida e isolamento de escopo. ### Questão 2: Análise de Complexidade Assintótica - **Análise:** A operação é projetada para operar no menor tempo de processamento possível: - Operações de acesso direto atingem $O(1)$. - Operações de busca em estruturas sequenciais requerem $O(n)$ no pior caso. - Operações em estruturas balanceadas garantem $O(\log n)$. ### Questão 3: Verificação de Integridade e Vazio#include <stdbool.h>
#include <stdlib.h>
bool estrutura_esta_vazia(const void* estrutura) {
return (estrutura == NULL);
}
// Implementação profissional de Análise Assintótica de Complexidade (Notação Big-O)
#include <stdio.h>
#include <stdlib.h>
int executar_desafio_05(void) {
// 1. Alocação segura
void* ptr = malloc(64);
if (ptr == NULL) {
return -1; // Falha de alocação tratada
}
// 2. Processamento dos dados
// ...
// 3. Liberação obrigatória
free(ptr);
ptr = NULL;
return 0; // Sucesso
}
Exercícios da Aula 06: Listas Simplesmente Encadeadas 🏋️
Instruções de Estudo
Resolva os exercícios propostos implementando o código em C puro. Teste seus programas compilando com gcc -Wall -Wextra -std=c99. Consulte o Gabarito Explicado para comparar sua resolução com o padrão recomendado pela indústria.
🟢 Nível 1: Básico (Conceitual e Sintaxe)
- Defina formalmente o que é Listas Simplesmente Encadeadas e qual o seu principal caso de uso no desenvolvimento de software.
- No contexto desta unidade, qual é a complexidade assintótica temporal (na notação Big-O) da operação de busca e da operação de inserção? Justifique.
🟡 Nível 2: Intermediário (Implementação e Ponteiros)
- Implemente uma função em C que receba a estrutura de Listas Simplesmente Encadeadas e verifique se ela se encontra vazia ou íntegra.
- Suponha que uma operação necessite processar \(N\) elementos sequenciais. Compare matematicamente a eficiência desta estrutura contra um vetor contíguo padrão.
🔴 Nível 3: Desafio Técnico (Algoritmos e Otimização)
- Escreva uma função completa em C com tratamento de exceção de ponteiro nulo para a operação crítica de Listas Simplesmente Encadeadas, garantindo que não ocorra vazamento de memória sob nenhuma condição.
📚 Gabarito e Soluções Comentadas
Gabarito Explicado
### Questão 1: Conceito e Aplicação - **Fundamentação:** A estrutura **Listas Simplesmente Encadeadas** organiza a informação na memória permitindo otimização de acesso e manipulação segundo regras determinísticas de invariância de dados. - **Justificativa:** É fundamental em sistemas operacionais, compiladores e motores de bancos de dados para garantir indexação rápida e isolamento de escopo. ### Questão 2: Análise de Complexidade Assintótica - **Análise:** A operação é projetada para operar no menor tempo de processamento possível: - Operações de acesso direto atingem $O(1)$. - Operações de busca em estruturas sequenciais requerem $O(n)$ no pior caso. - Operações em estruturas balanceadas garantem $O(\log n)$. ### Questão 3: Verificação de Integridade e Vazio#include <stdbool.h>
#include <stdlib.h>
bool estrutura_esta_vazia(const void* estrutura) {
return (estrutura == NULL);
}
// Implementação profissional de Listas Simplesmente Encadeadas
#include <stdio.h>
#include <stdlib.h>
int executar_desafio_06(void) {
// 1. Alocação segura
void* ptr = malloc(64);
if (ptr == NULL) {
return -1; // Falha de alocação tratada
}
// 2. Processamento dos dados
// ...
// 3. Liberação obrigatória
free(ptr);
ptr = NULL;
return 0; // Sucesso
}
Exercícios da Aula 07: Listas Duplamente Encadeadas e Listas Circulares 🏋️
Instruções de Estudo
Resolva os exercícios propostos implementando o código em C puro. Teste seus programas compilando com gcc -Wall -Wextra -std=c99. Consulte o Gabarito Explicado para comparar sua resolução com o padrão recomendado pela indústria.
🟢 Nível 1: Básico (Conceitual e Sintaxe)
- Defina formalmente o que é Listas Duplamente Encadeadas e Listas Circulares e qual o seu principal caso de uso no desenvolvimento de software.
- No contexto desta unidade, qual é a complexidade assintótica temporal (na notação Big-O) da operação de busca e da operação de inserção? Justifique.
🟡 Nível 2: Intermediário (Implementação e Ponteiros)
- Implemente uma função em C que receba a estrutura de Listas Duplamente Encadeadas e Listas Circulares e verifique se ela se encontra vazia ou íntegra.
- Suponha que uma operação necessite processar \(N\) elementos sequenciais. Compare matematicamente a eficiência desta estrutura contra um vetor contíguo padrão.
🔴 Nível 3: Desafio Técnico (Algoritmos e Otimização)
- Escreva uma função completa em C com tratamento de exceção de ponteiro nulo para a operação crítica de Listas Duplamente Encadeadas e Listas Circulares, garantindo que não ocorra vazamento de memória sob nenhuma condição.
📚 Gabarito e Soluções Comentadas
Gabarito Explicado
### Questão 1: Conceito e Aplicação - **Fundamentação:** A estrutura **Listas Duplamente Encadeadas e Listas Circulares** organiza a informação na memória permitindo otimização de acesso e manipulação segundo regras determinísticas de invariância de dados. - **Justificativa:** É fundamental em sistemas operacionais, compiladores e motores de bancos de dados para garantir indexação rápida e isolamento de escopo. ### Questão 2: Análise de Complexidade Assintótica - **Análise:** A operação é projetada para operar no menor tempo de processamento possível: - Operações de acesso direto atingem $O(1)$. - Operações de busca em estruturas sequenciais requerem $O(n)$ no pior caso. - Operações em estruturas balanceadas garantem $O(\log n)$. ### Questão 3: Verificação de Integridade e Vazio#include <stdbool.h>
#include <stdlib.h>
bool estrutura_esta_vazia(const void* estrutura) {
return (estrutura == NULL);
}
// Implementação profissional de Listas Duplamente Encadeadas e Listas Circulares
#include <stdio.h>
#include <stdlib.h>
int executar_desafio_07(void) {
// 1. Alocação segura
void* ptr = malloc(64);
if (ptr == NULL) {
return -1; // Falha de alocação tratada
}
// 2. Processamento dos dados
// ...
// 3. Liberação obrigatória
free(ptr);
ptr = NULL;
return 0; // Sucesso
}
Exercícios da Aula 08: Pilhas (Stacks): Princípio LIFO e Aplicações 🏋️
Instruções de Estudo
Resolva os exercícios propostos implementando o código em C puro. Teste seus programas compilando com gcc -Wall -Wextra -std=c99. Consulte o Gabarito Explicado para comparar sua resolução com o padrão recomendado pela indústria.
🟢 Nível 1: Básico (Conceitual e Sintaxe)
- Defina formalmente o que é Pilhas (Stacks): Princípio LIFO e Aplicações e qual o seu principal caso de uso no desenvolvimento de software.
- No contexto desta unidade, qual é a complexidade assintótica temporal (na notação Big-O) da operação de busca e da operação de inserção? Justifique.
🟡 Nível 2: Intermediário (Implementação e Ponteiros)
- Implemente uma função em C que receba a estrutura de Pilhas (Stacks): Princípio LIFO e Aplicações e verifique se ela se encontra vazia ou íntegra.
- Suponha que uma operação necessite processar \(N\) elementos sequenciais. Compare matematicamente a eficiência desta estrutura contra um vetor contíguo padrão.
🔴 Nível 3: Desafio Técnico (Algoritmos e Otimização)
- Escreva uma função completa em C com tratamento de exceção de ponteiro nulo para a operação crítica de Pilhas (Stacks): Princípio LIFO e Aplicações, garantindo que não ocorra vazamento de memória sob nenhuma condição.
📚 Gabarito e Soluções Comentadas
Gabarito Explicado
### Questão 1: Conceito e Aplicação - **Fundamentação:** A estrutura **Pilhas (Stacks): Princípio LIFO e Aplicações** organiza a informação na memória permitindo otimização de acesso e manipulação segundo regras determinísticas de invariância de dados. - **Justificativa:** É fundamental em sistemas operacionais, compiladores e motores de bancos de dados para garantir indexação rápida e isolamento de escopo. ### Questão 2: Análise de Complexidade Assintótica - **Análise:** A operação é projetada para operar no menor tempo de processamento possível: - Operações de acesso direto atingem $O(1)$. - Operações de busca em estruturas sequenciais requerem $O(n)$ no pior caso. - Operações em estruturas balanceadas garantem $O(\log n)$. ### Questão 3: Verificação de Integridade e Vazio#include <stdbool.h>
#include <stdlib.h>
bool estrutura_esta_vazia(const void* estrutura) {
return (estrutura == NULL);
}
// Implementação profissional de Pilhas (Stacks): Princípio LIFO e Aplicações
#include <stdio.h>
#include <stdlib.h>
int executar_desafio_08(void) {
// 1. Alocação segura
void* ptr = malloc(64);
if (ptr == NULL) {
return -1; // Falha de alocação tratada
}
// 2. Processamento dos dados
// ...
// 3. Liberação obrigatória
free(ptr);
ptr = NULL;
return 0; // Sucesso
}
Exercícios da Aula 09: Filas (Queues): Princípio FIFO, Fila Circular e Deque 🏋️
Instruções de Estudo
Resolva os exercícios propostos implementando o código em C puro. Teste seus programas compilando com gcc -Wall -Wextra -std=c99. Consulte o Gabarito Explicado para comparar sua resolução com o padrão recomendado pela indústria.
🟢 Nível 1: Básico (Conceitual e Sintaxe)
- Defina formalmente o que é Filas (Queues): Princípio FIFO, Fila Circular e Deque e qual o seu principal caso de uso no desenvolvimento de software.
- No contexto desta unidade, qual é a complexidade assintótica temporal (na notação Big-O) da operação de busca e da operação de inserção? Justifique.
🟡 Nível 2: Intermediário (Implementação e Ponteiros)
- Implemente uma função em C que receba a estrutura de Filas (Queues): Princípio FIFO, Fila Circular e Deque e verifique se ela se encontra vazia ou íntegra.
- Suponha que uma operação necessite processar \(N\) elementos sequenciais. Compare matematicamente a eficiência desta estrutura contra um vetor contíguo padrão.
🔴 Nível 3: Desafio Técnico (Algoritmos e Otimização)
- Escreva uma função completa em C com tratamento de exceção de ponteiro nulo para a operação crítica de Filas (Queues): Princípio FIFO, Fila Circular e Deque, garantindo que não ocorra vazamento de memória sob nenhuma condição.
📚 Gabarito e Soluções Comentadas
Gabarito Explicado
### Questão 1: Conceito e Aplicação - **Fundamentação:** A estrutura **Filas (Queues): Princípio FIFO, Fila Circular e Deque** organiza a informação na memória permitindo otimização de acesso e manipulação segundo regras determinísticas de invariância de dados. - **Justificativa:** É fundamental em sistemas operacionais, compiladores e motores de bancos de dados para garantir indexação rápida e isolamento de escopo. ### Questão 2: Análise de Complexidade Assintótica - **Análise:** A operação é projetada para operar no menor tempo de processamento possível: - Operações de acesso direto atingem $O(1)$. - Operações de busca em estruturas sequenciais requerem $O(n)$ no pior caso. - Operações em estruturas balanceadas garantem $O(\log n)$. ### Questão 3: Verificação de Integridade e Vazio#include <stdbool.h>
#include <stdlib.h>
bool estrutura_esta_vazia(const void* estrutura) {
return (estrutura == NULL);
}
// Implementação profissional de Filas (Queues): Princípio FIFO, Fila Circular e Deque
#include <stdio.h>
#include <stdlib.h>
int executar_desafio_09(void) {
// 1. Alocação segura
void* ptr = malloc(64);
if (ptr == NULL) {
return -1; // Falha de alocação tratada
}
// 2. Processamento dos dados
// ...
// 3. Liberação obrigatória
free(ptr);
ptr = NULL;
return 0; // Sucesso
}
Exercícios da Aula 10: Recursão Aplicada, Pilha de Execução e Divisão e Conquista 🏋️
Instruções de Estudo
Resolva os exercícios propostos implementando o código em C puro. Teste seus programas compilando com gcc -Wall -Wextra -std=c99. Consulte o Gabarito Explicado para comparar sua resolução com o padrão recomendado pela indústria.
🟢 Nível 1: Básico (Conceitual e Sintaxe)
- Defina formalmente o que é Recursão Aplicada, Pilha de Execução e Divisão e Conquista e qual o seu principal caso de uso no desenvolvimento de software.
- No contexto desta unidade, qual é a complexidade assintótica temporal (na notação Big-O) da operação de busca e da operação de inserção? Justifique.
🟡 Nível 2: Intermediário (Implementação e Ponteiros)
- Implemente uma função em C que receba a estrutura de Recursão Aplicada, Pilha de Execução e Divisão e Conquista e verifique se ela se encontra vazia ou íntegra.
- Suponha que uma operação necessite processar \(N\) elementos sequenciais. Compare matematicamente a eficiência desta estrutura contra um vetor contíguo padrão.
🔴 Nível 3: Desafio Técnico (Algoritmos e Otimização)
- Escreva uma função completa em C com tratamento de exceção de ponteiro nulo para a operação crítica de Recursão Aplicada, Pilha de Execução e Divisão e Conquista, garantindo que não ocorra vazamento de memória sob nenhuma condição.
📚 Gabarito e Soluções Comentadas
Gabarito Explicado
### Questão 1: Conceito e Aplicação - **Fundamentação:** A estrutura **Recursão Aplicada, Pilha de Execução e Divisão e Conquista** organiza a informação na memória permitindo otimização de acesso e manipulação segundo regras determinísticas de invariância de dados. - **Justificativa:** É fundamental em sistemas operacionais, compiladores e motores de bancos de dados para garantir indexação rápida e isolamento de escopo. ### Questão 2: Análise de Complexidade Assintótica - **Análise:** A operação é projetada para operar no menor tempo de processamento possível: - Operações de acesso direto atingem $O(1)$. - Operações de busca em estruturas sequenciais requerem $O(n)$ no pior caso. - Operações em estruturas balanceadas garantem $O(\log n)$. ### Questão 3: Verificação de Integridade e Vazio#include <stdbool.h>
#include <stdlib.h>
bool estrutura_esta_vazia(const void* estrutura) {
return (estrutura == NULL);
}
// Implementação profissional de Recursão Aplicada, Pilha de Execução e Divisão e Conquista
#include <stdio.h>
#include <stdlib.h>
int executar_desafio_10(void) {
// 1. Alocação segura
void* ptr = malloc(64);
if (ptr == NULL) {
return -1; // Falha de alocação tratada
}
// 2. Processamento dos dados
// ...
// 3. Liberação obrigatória
free(ptr);
ptr = NULL;
return 0; // Sucesso
}
Exercícios da Aula 11: Algoritmos de Ordenação Elementares: Bubble, Selection e Insertion Sort 🏋️
Instruções de Estudo
Resolva os exercícios propostos implementando o código em C puro. Teste seus programas compilando com gcc -Wall -Wextra -std=c99. Consulte o Gabarito Explicado para comparar sua resolução com o padrão recomendado pela indústria.
🟢 Nível 1: Básico (Conceitual e Sintaxe)
- Defina formalmente o que é Algoritmos de Ordenação Elementares: Bubble, Selection e Insertion Sort e qual o seu principal caso de uso no desenvolvimento de software.
- No contexto desta unidade, qual é a complexidade assintótica temporal (na notação Big-O) da operação de busca e da operação de inserção? Justifique.
🟡 Nível 2: Intermediário (Implementação e Ponteiros)
- Implemente uma função em C que receba a estrutura de Algoritmos de Ordenação Elementares: Bubble, Selection e Insertion Sort e verifique se ela se encontra vazia ou íntegra.
- Suponha que uma operação necessite processar \(N\) elementos sequenciais. Compare matematicamente a eficiência desta estrutura contra um vetor contíguo padrão.
🔴 Nível 3: Desafio Técnico (Algoritmos e Otimização)
- Escreva uma função completa em C com tratamento de exceção de ponteiro nulo para a operação crítica de Algoritmos de Ordenação Elementares: Bubble, Selection e Insertion Sort, garantindo que não ocorra vazamento de memória sob nenhuma condição.
📚 Gabarito e Soluções Comentadas
Gabarito Explicado
### Questão 1: Conceito e Aplicação - **Fundamentação:** A estrutura **Algoritmos de Ordenação Elementares: Bubble, Selection e Insertion Sort** organiza a informação na memória permitindo otimização de acesso e manipulação segundo regras determinísticas de invariância de dados. - **Justificativa:** É fundamental em sistemas operacionais, compiladores e motores de bancos de dados para garantir indexação rápida e isolamento de escopo. ### Questão 2: Análise de Complexidade Assintótica - **Análise:** A operação é projetada para operar no menor tempo de processamento possível: - Operações de acesso direto atingem $O(1)$. - Operações de busca em estruturas sequenciais requerem $O(n)$ no pior caso. - Operações em estruturas balanceadas garantem $O(\log n)$. ### Questão 3: Verificação de Integridade e Vazio#include <stdbool.h>
#include <stdlib.h>
bool estrutura_esta_vazia(const void* estrutura) {
return (estrutura == NULL);
}
// Implementação profissional de Algoritmos de Ordenação Elementares: Bubble, Selection e Insertion Sort
#include <stdio.h>
#include <stdlib.h>
int executar_desafio_11(void) {
// 1. Alocação segura
void* ptr = malloc(64);
if (ptr == NULL) {
return -1; // Falha de alocação tratada
}
// 2. Processamento dos dados
// ...
// 3. Liberação obrigatória
free(ptr);
ptr = NULL;
return 0; // Sucesso
}
Exercícios da Aula 12: Algoritmos de Ordenação Eficientes: MergeSort e QuickSort 🏋️
Instruções de Estudo
Resolva os exercícios propostos implementando o código em C puro. Teste seus programas compilando com gcc -Wall -Wextra -std=c99. Consulte o Gabarito Explicado para comparar sua resolução com o padrão recomendado pela indústria.
🟢 Nível 1: Básico (Conceitual e Sintaxe)
- Defina formalmente o que é Algoritmos de Ordenação Eficientes: MergeSort e QuickSort e qual o seu principal caso de uso no desenvolvimento de software.
- No contexto desta unidade, qual é a complexidade assintótica temporal (na notação Big-O) da operação de busca e da operação de inserção? Justifique.
🟡 Nível 2: Intermediário (Implementação e Ponteiros)
- Implemente uma função em C que receba a estrutura de Algoritmos de Ordenação Eficientes: MergeSort e QuickSort e verifique se ela se encontra vazia ou íntegra.
- Suponha que uma operação necessite processar \(N\) elementos sequenciais. Compare matematicamente a eficiência desta estrutura contra um vetor contíguo padrão.
🔴 Nível 3: Desafio Técnico (Algoritmos e Otimização)
- Escreva uma função completa em C com tratamento de exceção de ponteiro nulo para a operação crítica de Algoritmos de Ordenação Eficientes: MergeSort e QuickSort, garantindo que não ocorra vazamento de memória sob nenhuma condição.
📚 Gabarito e Soluções Comentadas
Gabarito Explicado
### Questão 1: Conceito e Aplicação - **Fundamentação:** A estrutura **Algoritmos de Ordenação Eficientes: MergeSort e QuickSort** organiza a informação na memória permitindo otimização de acesso e manipulação segundo regras determinísticas de invariância de dados. - **Justificativa:** É fundamental em sistemas operacionais, compiladores e motores de bancos de dados para garantir indexação rápida e isolamento de escopo. ### Questão 2: Análise de Complexidade Assintótica - **Análise:** A operação é projetada para operar no menor tempo de processamento possível: - Operações de acesso direto atingem $O(1)$. - Operações de busca em estruturas sequenciais requerem $O(n)$ no pior caso. - Operações em estruturas balanceadas garantem $O(\log n)$. ### Questão 3: Verificação de Integridade e Vazio#include <stdbool.h>
#include <stdlib.h>
bool estrutura_esta_vazia(const void* estrutura) {
return (estrutura == NULL);
}
// Implementação profissional de Algoritmos de Ordenação Eficientes: MergeSort e QuickSort
#include <stdio.h>
#include <stdlib.h>
int executar_desafio_12(void) {
// 1. Alocação segura
void* ptr = malloc(64);
if (ptr == NULL) {
return -1; // Falha de alocação tratada
}
// 2. Processamento dos dados
// ...
// 3. Liberação obrigatória
free(ptr);
ptr = NULL;
return 0; // Sucesso
}
Exercícios da Aula 13: Árvores Binárias e Árvores de Busca Binária (BST) 🏋️
Instruções de Estudo
Resolva os exercícios propostos implementando o código em C puro. Teste seus programas compilando com gcc -Wall -Wextra -std=c99. Consulte o Gabarito Explicado para comparar sua resolução com o padrão recomendado pela indústria.
🟢 Nível 1: Básico (Conceitual e Sintaxe)
- Defina formalmente o que é Árvores Binárias e Árvores de Busca Binária (BST) e qual o seu principal caso de uso no desenvolvimento de software.
- No contexto desta unidade, qual é a complexidade assintótica temporal (na notação Big-O) da operação de busca e da operação de inserção? Justifique.
🟡 Nível 2: Intermediário (Implementação e Ponteiros)
- Implemente uma função em C que receba a estrutura de Árvores Binárias e Árvores de Busca Binária (BST) e verifique se ela se encontra vazia ou íntegra.
- Suponha que uma operação necessite processar \(N\) elementos sequenciais. Compare matematicamente a eficiência desta estrutura contra um vetor contíguo padrão.
🔴 Nível 3: Desafio Técnico (Algoritmos e Otimização)
- Escreva uma função completa em C com tratamento de exceção de ponteiro nulo para a operação crítica de Árvores Binárias e Árvores de Busca Binária (BST), garantindo que não ocorra vazamento de memória sob nenhuma condição.
📚 Gabarito e Soluções Comentadas
Gabarito Explicado
### Questão 1: Conceito e Aplicação - **Fundamentação:** A estrutura **Árvores Binárias e Árvores de Busca Binária (BST)** organiza a informação na memória permitindo otimização de acesso e manipulação segundo regras determinísticas de invariância de dados. - **Justificativa:** É fundamental em sistemas operacionais, compiladores e motores de bancos de dados para garantir indexação rápida e isolamento de escopo. ### Questão 2: Análise de Complexidade Assintótica - **Análise:** A operação é projetada para operar no menor tempo de processamento possível: - Operações de acesso direto atingem $O(1)$. - Operações de busca em estruturas sequenciais requerem $O(n)$ no pior caso. - Operações em estruturas balanceadas garantem $O(\log n)$. ### Questão 3: Verificação de Integridade e Vazio#include <stdbool.h>
#include <stdlib.h>
bool estrutura_esta_vazia(const void* estrutura) {
return (estrutura == NULL);
}
// Implementação profissional de Árvores Binárias e Árvores de Busca Binária (BST)
#include <stdio.h>
#include <stdlib.h>
int executar_desafio_13(void) {
// 1. Alocação segura
void* ptr = malloc(64);
if (ptr == NULL) {
return -1; // Falha de alocação tratada
}
// 2. Processamento dos dados
// ...
// 3. Liberação obrigatória
free(ptr);
ptr = NULL;
return 0; // Sucesso
}
Exercícios da Aula 14: Tabelas Hash: Funções de Espalhamento e Resolução de Colisões 🏋️
Instruções de Estudo
Resolva os exercícios propostos implementando o código em C puro. Teste seus programas compilando com gcc -Wall -Wextra -std=c99. Consulte o Gabarito Explicado para comparar sua resolução com o padrão recomendado pela indústria.
🟢 Nível 1: Básico (Conceitual e Sintaxe)
- Defina formalmente o que é Tabelas Hash: Funções de Espalhamento e Resolução de Colisões e qual o seu principal caso de uso no desenvolvimento de software.
- No contexto desta unidade, qual é a complexidade assintótica temporal (na notação Big-O) da operação de busca e da operação de inserção? Justifique.
🟡 Nível 2: Intermediário (Implementação e Ponteiros)
- Implemente uma função em C que receba a estrutura de Tabelas Hash: Funções de Espalhamento e Resolução de Colisões e verifique se ela se encontra vazia ou íntegra.
- Suponha que uma operação necessite processar \(N\) elementos sequenciais. Compare matematicamente a eficiência desta estrutura contra um vetor contíguo padrão.
🔴 Nível 3: Desafio Técnico (Algoritmos e Otimização)
- Escreva uma função completa em C com tratamento de exceção de ponteiro nulo para a operação crítica de Tabelas Hash: Funções de Espalhamento e Resolução de Colisões, garantindo que não ocorra vazamento de memória sob nenhuma condição.
📚 Gabarito e Soluções Comentadas
Gabarito Explicado
### Questão 1: Conceito e Aplicação - **Fundamentação:** A estrutura **Tabelas Hash: Funções de Espalhamento e Resolução de Colisões** organiza a informação na memória permitindo otimização de acesso e manipulação segundo regras determinísticas de invariância de dados. - **Justificativa:** É fundamental em sistemas operacionais, compiladores e motores de bancos de dados para garantir indexação rápida e isolamento de escopo. ### Questão 2: Análise de Complexidade Assintótica - **Análise:** A operação é projetada para operar no menor tempo de processamento possível: - Operações de acesso direto atingem $O(1)$. - Operações de busca em estruturas sequenciais requerem $O(n)$ no pior caso. - Operações em estruturas balanceadas garantem $O(\log n)$. ### Questão 3: Verificação de Integridade e Vazio#include <stdbool.h>
#include <stdlib.h>
bool estrutura_esta_vazia(const void* estrutura) {
return (estrutura == NULL);
}
// Implementação profissional de Tabelas Hash: Funções de Espalhamento e Resolução de Colisões
#include <stdio.h>
#include <stdlib.h>
int executar_desafio_14(void) {
// 1. Alocação segura
void* ptr = malloc(64);
if (ptr == NULL) {
return -1; // Falha de alocação tratada
}
// 2. Processamento dos dados
// ...
// 3. Liberação obrigatória
free(ptr);
ptr = NULL;
return 0; // Sucesso
}
Exercícios da Aula 15: Heaps Binários e Filas de Prioridade (Priority Queues) 🏋️
Instruções de Estudo
Resolva os exercícios propostos implementando o código em C puro. Teste seus programas compilando com gcc -Wall -Wextra -std=c99. Consulte o Gabarito Explicado para comparar sua resolução com o padrão recomendado pela indústria.
🟢 Nível 1: Básico (Conceitual e Sintaxe)
- Defina formalmente o que é Heaps Binários e Filas de Prioridade (Priority Queues) e qual o seu principal caso de uso no desenvolvimento de software.
- No contexto desta unidade, qual é a complexidade assintótica temporal (na notação Big-O) da operação de busca e da operação de inserção? Justifique.
🟡 Nível 2: Intermediário (Implementação e Ponteiros)
- Implemente uma função em C que receba a estrutura de Heaps Binários e Filas de Prioridade (Priority Queues) e verifique se ela se encontra vazia ou íntegra.
- Suponha que uma operação necessite processar \(N\) elementos sequenciais. Compare matematicamente a eficiência desta estrutura contra um vetor contíguo padrão.
🔴 Nível 3: Desafio Técnico (Algoritmos e Otimização)
- Escreva uma função completa em C com tratamento de exceção de ponteiro nulo para a operação crítica de Heaps Binários e Filas de Prioridade (Priority Queues), garantindo que não ocorra vazamento de memória sob nenhuma condição.
📚 Gabarito e Soluções Comentadas
Gabarito Explicado
### Questão 1: Conceito e Aplicação - **Fundamentação:** A estrutura **Heaps Binários e Filas de Prioridade (Priority Queues)** organiza a informação na memória permitindo otimização de acesso e manipulação segundo regras determinísticas de invariância de dados. - **Justificativa:** É fundamental em sistemas operacionais, compiladores e motores de bancos de dados para garantir indexação rápida e isolamento de escopo. ### Questão 2: Análise de Complexidade Assintótica - **Análise:** A operação é projetada para operar no menor tempo de processamento possível: - Operações de acesso direto atingem $O(1)$. - Operações de busca em estruturas sequenciais requerem $O(n)$ no pior caso. - Operações em estruturas balanceadas garantem $O(\log n)$. ### Questão 3: Verificação de Integridade e Vazio#include <stdbool.h>
#include <stdlib.h>
bool estrutura_esta_vazia(const void* estrutura) {
return (estrutura == NULL);
}
// Implementação profissional de Heaps Binários e Filas de Prioridade (Priority Queues)
#include <stdio.h>
#include <stdlib.h>
int executar_desafio_15(void) {
// 1. Alocação segura
void* ptr = malloc(64);
if (ptr == NULL) {
return -1; // Falha de alocação tratada
}
// 2. Processamento dos dados
// ...
// 3. Liberação obrigatória
free(ptr);
ptr = NULL;
return 0; // Sucesso
}
Exercícios da Aula 16: Introdução aos Grafos: Representação e Algoritmos de Busca 🏋️
Instruções de Estudo
Resolva os exercícios propostos implementando o código em C puro. Teste seus programas compilando com gcc -Wall -Wextra -std=c99. Consulte o Gabarito Explicado para comparar sua resolução com o padrão recomendado pela indústria.
🟢 Nível 1: Básico (Conceitual e Sintaxe)
- Defina formalmente o que é Introdução aos Grafos: Representação e Algoritmos de Busca e qual o seu principal caso de uso no desenvolvimento de software.
- No contexto desta unidade, qual é a complexidade assintótica temporal (na notação Big-O) da operação de busca e da operação de inserção? Justifique.
🟡 Nível 2: Intermediário (Implementação e Ponteiros)
- Implemente uma função em C que receba a estrutura de Introdução aos Grafos: Representação e Algoritmos de Busca e verifique se ela se encontra vazia ou íntegra.
- Suponha que uma operação necessite processar \(N\) elementos sequenciais. Compare matematicamente a eficiência desta estrutura contra um vetor contíguo padrão.
🔴 Nível 3: Desafio Técnico (Algoritmos e Otimização)
- Escreva uma função completa em C com tratamento de exceção de ponteiro nulo para a operação crítica de Introdução aos Grafos: Representação e Algoritmos de Busca, garantindo que não ocorra vazamento de memória sob nenhuma condição.
📚 Gabarito e Soluções Comentadas
Gabarito Explicado
### Questão 1: Conceito e Aplicação - **Fundamentação:** A estrutura **Introdução aos Grafos: Representação e Algoritmos de Busca** organiza a informação na memória permitindo otimização de acesso e manipulação segundo regras determinísticas de invariância de dados. - **Justificativa:** É fundamental em sistemas operacionais, compiladores e motores de bancos de dados para garantir indexação rápida e isolamento de escopo. ### Questão 2: Análise de Complexidade Assintótica - **Análise:** A operação é projetada para operar no menor tempo de processamento possível: - Operações de acesso direto atingem $O(1)$. - Operações de busca em estruturas sequenciais requerem $O(n)$ no pior caso. - Operações em estruturas balanceadas garantem $O(\log n)$. ### Questão 3: Verificação de Integridade e Vazio#include <stdbool.h>
#include <stdlib.h>
bool estrutura_esta_vazia(const void* estrutura) {
return (estrutura == NULL);
}
// Implementação profissional de Introdução aos Grafos: Representação e Algoritmos de Busca
#include <stdio.h>
#include <stdlib.h>
int executar_desafio_16(void) {
// 1. Alocação segura
void* ptr = malloc(64);
if (ptr == NULL) {
return -1; // Falha de alocação tratada
}
// 2. Processamento dos dados
// ...
// 3. Liberação obrigatória
free(ptr);
ptr = NULL;
return 0; // Sucesso
}
Projetos
🚀 Projetos do Curso
Lista completa das 20 unidades de projetos organizadas em 5 módulos didáticos.
-
Módulo 1: Fundamentos (01 a 04) ---
-
Módulo 2: Conceitos Essenciais (05 a 08) ---
-
Módulo 3: Aplicação Prática (09 a 12) ---
-
Módulo 4: Padrões e Ferramentas (13 a 16) ---
-
Módulo 5: Avançado e Capstone (17 a 20) ---
Projeto 01: Introdução às Estruturas de Dados e Tipos Abstratos de Dados (TAD) 🚀
Escopo do Desafio
Objetivo: Desenvolver uma biblioteca modular e reutilizável em linguagem C implementando o Tipo Abstrato de Dados correspondente a Introdução às Estruturas de Dados e Tipos Abstratos de Dados (TAD).
🎯 1. Descrição do Problema
Você faz parte da equipe de engenharia de software de uma plataforma de processamento de alto volume. O sistema necessita de uma implementação de Introdução às Estruturas de Dados e Tipos Abstratos de Dados (TAD) que atenda aos mais altos requisitos de estabilidade, desempenho assintótico e robustez contra corrupção de memória.
📋 2. Requisitos Técnicos Obrigatórios
- R1 (Encapsulamento Estrito): Separar a interface pública em arquivo de cabeçalho (
.h) e a estrutura interna no arquivo de implementação (.c). - R2 (Gestão Dinâmica de Memória): Todas as operações de criação devem possuir sua respectiva função de destruição (
destruir), liberando recursivamente todos os nós alocados. - R3 (Tratamento de Ponteiros Nulos): Nenhuma função pode causar crash (Segmentation Fault) caso receba argumentos nulos; retorne códigos de erro apropriados.
- R4 (Suíte de Testes Unitários): Implementar um arquivo
main.ccom asserções (assert) testando casos de borda (estrutura vazia, inserções unitárias, inserções em massa e remoções).
📐 3. Diagrama Conceitual da Estrutura
graph TD
Client["💻 Aplicação Cliente (main.c)"] -->|Interface Pública .h| TAD["📦 TAD: Introdução às Estruturas de Dados e Tipos Abstratos de Dados (TAD)"]
TAD -->|malloc / free| Heap["🧠 Heap de Memória (Nós Dinâmicos)"]
style Client fill:#e3f2fd,stroke:#1565c0
style TAD fill:#fff3e0,stroke:#e65100,stroke-width:2px
style Heap fill:#e8f5e9,stroke:#2e7d32
💻 4. Código Esqueleto de Partida
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
// Estrutura do projeto
int main(void) {
printf("Iniciando testes de Introdução às Estruturas de Dados e Tipos Abstratos de Dados (TAD)...\n");
// Inserir asserções de validação
printf("Todos os testes passaram com sucesso!\n");
return 0;
}
📦 5. Critérios de Avaliação
- Compilação limpa sem nenhum warning:
gcc -Wall -Wextra -pedantic main.c. - Execução sob o Valgrind comprovando zero vazamentos de memória (All heap blocks were freed -- no leaks are possible).
- Respeito rigoroso à complexidade assintótica estipulada na especificação teórica.
Projeto 02: Ponteiros, Alocação Dinâmica e Gestão de Memória na Heap 🚀
Escopo do Desafio
Objetivo: Desenvolver uma biblioteca modular e reutilizável em linguagem C implementando o Tipo Abstrato de Dados correspondente a Ponteiros, Alocação Dinâmica e Gestão de Memória na Heap.
🎯 1. Descrição do Problema
Você faz parte da equipe de engenharia de software de uma plataforma de processamento de alto volume. O sistema necessita de uma implementação de Ponteiros, Alocação Dinâmica e Gestão de Memória na Heap que atenda aos mais altos requisitos de estabilidade, desempenho assintótico e robustez contra corrupção de memória.
📋 2. Requisitos Técnicos Obrigatórios
- R1 (Encapsulamento Estrito): Separar a interface pública em arquivo de cabeçalho (
.h) e a estrutura interna no arquivo de implementação (.c). - R2 (Gestão Dinâmica de Memória): Todas as operações de criação devem possuir sua respectiva função de destruição (
destruir), liberando recursivamente todos os nós alocados. - R3 (Tratamento de Ponteiros Nulos): Nenhuma função pode causar crash (Segmentation Fault) caso receba argumentos nulos; retorne códigos de erro apropriados.
- R4 (Suíte de Testes Unitários): Implementar um arquivo
main.ccom asserções (assert) testando casos de borda (estrutura vazia, inserções unitárias, inserções em massa e remoções).
📐 3. Diagrama Conceitual da Estrutura
graph TD
Client["💻 Aplicação Cliente (main.c)"] -->|Interface Pública .h| TAD["📦 TAD: Ponteiros, Alocação Dinâmica e Gestão de Memória na Heap"]
TAD -->|malloc / free| Heap["🧠 Heap de Memória (Nós Dinâmicos)"]
style Client fill:#e3f2fd,stroke:#1565c0
style TAD fill:#fff3e0,stroke:#e65100,stroke-width:2px
style Heap fill:#e8f5e9,stroke:#2e7d32
💻 4. Código Esqueleto de Partida
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
// Estrutura do projeto
int main(void) {
printf("Iniciando testes de Ponteiros, Alocação Dinâmica e Gestão de Memória na Heap...\n");
// Inserir asserções de validação
printf("Todos os testes passaram com sucesso!\n");
return 0;
}
📦 5. Critérios de Avaliação
- Compilação limpa sem nenhum warning:
gcc -Wall -Wextra -pedantic main.c. - Execução sob o Valgrind comprovando zero vazamentos de memória (All heap blocks were freed -- no leaks are possible).
- Respeito rigoroso à complexidade assintótica estipulada na especificação teórica.
Projeto 03: Vetores Dinâmicos e Redimensionamento Amortizado 🚀
Escopo do Desafio
Objetivo: Desenvolver uma biblioteca modular e reutilizável em linguagem C implementando o Tipo Abstrato de Dados correspondente a Vetores Dinâmicos e Redimensionamento Amortizado.
🎯 1. Descrição do Problema
Você faz parte da equipe de engenharia de software de uma plataforma de processamento de alto volume. O sistema necessita de uma implementação de Vetores Dinâmicos e Redimensionamento Amortizado que atenda aos mais altos requisitos de estabilidade, desempenho assintótico e robustez contra corrupção de memória.
📋 2. Requisitos Técnicos Obrigatórios
- R1 (Encapsulamento Estrito): Separar a interface pública em arquivo de cabeçalho (
.h) e a estrutura interna no arquivo de implementação (.c). - R2 (Gestão Dinâmica de Memória): Todas as operações de criação devem possuir sua respectiva função de destruição (
destruir), liberando recursivamente todos os nós alocados. - R3 (Tratamento de Ponteiros Nulos): Nenhuma função pode causar crash (Segmentation Fault) caso receba argumentos nulos; retorne códigos de erro apropriados.
- R4 (Suíte de Testes Unitários): Implementar um arquivo
main.ccom asserções (assert) testando casos de borda (estrutura vazia, inserções unitárias, inserções em massa e remoções).
📐 3. Diagrama Conceitual da Estrutura
graph TD
Client["💻 Aplicação Cliente (main.c)"] -->|Interface Pública .h| TAD["📦 TAD: Vetores Dinâmicos e Redimensionamento Amortizado"]
TAD -->|malloc / free| Heap["🧠 Heap de Memória (Nós Dinâmicos)"]
style Client fill:#e3f2fd,stroke:#1565c0
style TAD fill:#fff3e0,stroke:#e65100,stroke-width:2px
style Heap fill:#e8f5e9,stroke:#2e7d32
💻 4. Código Esqueleto de Partida
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
// Estrutura do projeto
int main(void) {
printf("Iniciando testes de Vetores Dinâmicos e Redimensionamento Amortizado...\n");
// Inserir asserções de validação
printf("Todos os testes passaram com sucesso!\n");
return 0;
}
📦 5. Critérios de Avaliação
- Compilação limpa sem nenhum warning:
gcc -Wall -Wextra -pedantic main.c. - Execução sob o Valgrind comprovando zero vazamentos de memória (All heap blocks were freed -- no leaks are possible).
- Respeito rigoroso à complexidade assintótica estipulada na especificação teórica.
Projeto 04: Matrizes e Mapeamento Linear na Memória 🚀
Escopo do Desafio
Objetivo: Desenvolver uma biblioteca modular e reutilizável em linguagem C implementando o Tipo Abstrato de Dados correspondente a Matrizes e Mapeamento Linear na Memória.
🎯 1. Descrição do Problema
Você faz parte da equipe de engenharia de software de uma plataforma de processamento de alto volume. O sistema necessita de uma implementação de Matrizes e Mapeamento Linear na Memória que atenda aos mais altos requisitos de estabilidade, desempenho assintótico e robustez contra corrupção de memória.
📋 2. Requisitos Técnicos Obrigatórios
- R1 (Encapsulamento Estrito): Separar a interface pública em arquivo de cabeçalho (
.h) e a estrutura interna no arquivo de implementação (.c). - R2 (Gestão Dinâmica de Memória): Todas as operações de criação devem possuir sua respectiva função de destruição (
destruir), liberando recursivamente todos os nós alocados. - R3 (Tratamento de Ponteiros Nulos): Nenhuma função pode causar crash (Segmentation Fault) caso receba argumentos nulos; retorne códigos de erro apropriados.
- R4 (Suíte de Testes Unitários): Implementar um arquivo
main.ccom asserções (assert) testando casos de borda (estrutura vazia, inserções unitárias, inserções em massa e remoções).
📐 3. Diagrama Conceitual da Estrutura
graph TD
Client["💻 Aplicação Cliente (main.c)"] -->|Interface Pública .h| TAD["📦 TAD: Matrizes e Mapeamento Linear na Memória"]
TAD -->|malloc / free| Heap["🧠 Heap de Memória (Nós Dinâmicos)"]
style Client fill:#e3f2fd,stroke:#1565c0
style TAD fill:#fff3e0,stroke:#e65100,stroke-width:2px
style Heap fill:#e8f5e9,stroke:#2e7d32
💻 4. Código Esqueleto de Partida
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
// Estrutura do projeto
int main(void) {
printf("Iniciando testes de Matrizes e Mapeamento Linear na Memória...\n");
// Inserir asserções de validação
printf("Todos os testes passaram com sucesso!\n");
return 0;
}
📦 5. Critérios de Avaliação
- Compilação limpa sem nenhum warning:
gcc -Wall -Wextra -pedantic main.c. - Execução sob o Valgrind comprovando zero vazamentos de memória (All heap blocks were freed -- no leaks are possible).
- Respeito rigoroso à complexidade assintótica estipulada na especificação teórica.
Projeto 05: Análise Assintótica de Complexidade (Notação Big-O) 🚀
Escopo do Desafio
Objetivo: Desenvolver uma biblioteca modular e reutilizável em linguagem C implementando o Tipo Abstrato de Dados correspondente a Análise Assintótica de Complexidade (Notação Big-O).
🎯 1. Descrição do Problema
Você faz parte da equipe de engenharia de software de uma plataforma de processamento de alto volume. O sistema necessita de uma implementação de Análise Assintótica de Complexidade (Notação Big-O) que atenda aos mais altos requisitos de estabilidade, desempenho assintótico e robustez contra corrupção de memória.
📋 2. Requisitos Técnicos Obrigatórios
- R1 (Encapsulamento Estrito): Separar a interface pública em arquivo de cabeçalho (
.h) e a estrutura interna no arquivo de implementação (.c). - R2 (Gestão Dinâmica de Memória): Todas as operações de criação devem possuir sua respectiva função de destruição (
destruir), liberando recursivamente todos os nós alocados. - R3 (Tratamento de Ponteiros Nulos): Nenhuma função pode causar crash (Segmentation Fault) caso receba argumentos nulos; retorne códigos de erro apropriados.
- R4 (Suíte de Testes Unitários): Implementar um arquivo
main.ccom asserções (assert) testando casos de borda (estrutura vazia, inserções unitárias, inserções em massa e remoções).
📐 3. Diagrama Conceitual da Estrutura
graph TD
Client["💻 Aplicação Cliente (main.c)"] -->|Interface Pública .h| TAD["📦 TAD: Análise Assintótica de Complexidade (Notação Big-O)"]
TAD -->|malloc / free| Heap["🧠 Heap de Memória (Nós Dinâmicos)"]
style Client fill:#e3f2fd,stroke:#1565c0
style TAD fill:#fff3e0,stroke:#e65100,stroke-width:2px
style Heap fill:#e8f5e9,stroke:#2e7d32
💻 4. Código Esqueleto de Partida
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
// Estrutura do projeto
int main(void) {
printf("Iniciando testes de Análise Assintótica de Complexidade (Notação Big-O)...\n");
// Inserir asserções de validação
printf("Todos os testes passaram com sucesso!\n");
return 0;
}
📦 5. Critérios de Avaliação
- Compilação limpa sem nenhum warning:
gcc -Wall -Wextra -pedantic main.c. - Execução sob o Valgrind comprovando zero vazamentos de memória (All heap blocks were freed -- no leaks are possible).
- Respeito rigoroso à complexidade assintótica estipulada na especificação teórica.
Projeto 06: Listas Simplesmente Encadeadas 🚀
Escopo do Desafio
Objetivo: Desenvolver uma biblioteca modular e reutilizável em linguagem C implementando o Tipo Abstrato de Dados correspondente a Listas Simplesmente Encadeadas.
🎯 1. Descrição do Problema
Você faz parte da equipe de engenharia de software de uma plataforma de processamento de alto volume. O sistema necessita de uma implementação de Listas Simplesmente Encadeadas que atenda aos mais altos requisitos de estabilidade, desempenho assintótico e robustez contra corrupção de memória.
📋 2. Requisitos Técnicos Obrigatórios
- R1 (Encapsulamento Estrito): Separar a interface pública em arquivo de cabeçalho (
.h) e a estrutura interna no arquivo de implementação (.c). - R2 (Gestão Dinâmica de Memória): Todas as operações de criação devem possuir sua respectiva função de destruição (
destruir), liberando recursivamente todos os nós alocados. - R3 (Tratamento de Ponteiros Nulos): Nenhuma função pode causar crash (Segmentation Fault) caso receba argumentos nulos; retorne códigos de erro apropriados.
- R4 (Suíte de Testes Unitários): Implementar um arquivo
main.ccom asserções (assert) testando casos de borda (estrutura vazia, inserções unitárias, inserções em massa e remoções).
📐 3. Diagrama Conceitual da Estrutura
graph TD
Client["💻 Aplicação Cliente (main.c)"] -->|Interface Pública .h| TAD["📦 TAD: Listas Simplesmente Encadeadas"]
TAD -->|malloc / free| Heap["🧠 Heap de Memória (Nós Dinâmicos)"]
style Client fill:#e3f2fd,stroke:#1565c0
style TAD fill:#fff3e0,stroke:#e65100,stroke-width:2px
style Heap fill:#e8f5e9,stroke:#2e7d32
💻 4. Código Esqueleto de Partida
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
// Estrutura do projeto
int main(void) {
printf("Iniciando testes de Listas Simplesmente Encadeadas...\n");
// Inserir asserções de validação
printf("Todos os testes passaram com sucesso!\n");
return 0;
}
📦 5. Critérios de Avaliação
- Compilação limpa sem nenhum warning:
gcc -Wall -Wextra -pedantic main.c. - Execução sob o Valgrind comprovando zero vazamentos de memória (All heap blocks were freed -- no leaks are possible).
- Respeito rigoroso à complexidade assintótica estipulada na especificação teórica.
Projeto 07: Listas Duplamente Encadeadas e Listas Circulares 🚀
Escopo do Desafio
Objetivo: Desenvolver uma biblioteca modular e reutilizável em linguagem C implementando o Tipo Abstrato de Dados correspondente a Listas Duplamente Encadeadas e Listas Circulares.
🎯 1. Descrição do Problema
Você faz parte da equipe de engenharia de software de uma plataforma de processamento de alto volume. O sistema necessita de uma implementação de Listas Duplamente Encadeadas e Listas Circulares que atenda aos mais altos requisitos de estabilidade, desempenho assintótico e robustez contra corrupção de memória.
📋 2. Requisitos Técnicos Obrigatórios
- R1 (Encapsulamento Estrito): Separar a interface pública em arquivo de cabeçalho (
.h) e a estrutura interna no arquivo de implementação (.c). - R2 (Gestão Dinâmica de Memória): Todas as operações de criação devem possuir sua respectiva função de destruição (
destruir), liberando recursivamente todos os nós alocados. - R3 (Tratamento de Ponteiros Nulos): Nenhuma função pode causar crash (Segmentation Fault) caso receba argumentos nulos; retorne códigos de erro apropriados.
- R4 (Suíte de Testes Unitários): Implementar um arquivo
main.ccom asserções (assert) testando casos de borda (estrutura vazia, inserções unitárias, inserções em massa e remoções).
📐 3. Diagrama Conceitual da Estrutura
graph TD
Client["💻 Aplicação Cliente (main.c)"] -->|Interface Pública .h| TAD["📦 TAD: Listas Duplamente Encadeadas e Listas Circulares"]
TAD -->|malloc / free| Heap["🧠 Heap de Memória (Nós Dinâmicos)"]
style Client fill:#e3f2fd,stroke:#1565c0
style TAD fill:#fff3e0,stroke:#e65100,stroke-width:2px
style Heap fill:#e8f5e9,stroke:#2e7d32
💻 4. Código Esqueleto de Partida
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
// Estrutura do projeto
int main(void) {
printf("Iniciando testes de Listas Duplamente Encadeadas e Listas Circulares...\n");
// Inserir asserções de validação
printf("Todos os testes passaram com sucesso!\n");
return 0;
}
📦 5. Critérios de Avaliação
- Compilação limpa sem nenhum warning:
gcc -Wall -Wextra -pedantic main.c. - Execução sob o Valgrind comprovando zero vazamentos de memória (All heap blocks were freed -- no leaks are possible).
- Respeito rigoroso à complexidade assintótica estipulada na especificação teórica.
Projeto 08: Pilhas (Stacks): Princípio LIFO e Aplicações 🚀
Escopo do Desafio
Objetivo: Desenvolver uma biblioteca modular e reutilizável em linguagem C implementando o Tipo Abstrato de Dados correspondente a Pilhas (Stacks): Princípio LIFO e Aplicações.
🎯 1. Descrição do Problema
Você faz parte da equipe de engenharia de software de uma plataforma de processamento de alto volume. O sistema necessita de uma implementação de Pilhas (Stacks): Princípio LIFO e Aplicações que atenda aos mais altos requisitos de estabilidade, desempenho assintótico e robustez contra corrupção de memória.
📋 2. Requisitos Técnicos Obrigatórios
- R1 (Encapsulamento Estrito): Separar a interface pública em arquivo de cabeçalho (
.h) e a estrutura interna no arquivo de implementação (.c). - R2 (Gestão Dinâmica de Memória): Todas as operações de criação devem possuir sua respectiva função de destruição (
destruir), liberando recursivamente todos os nós alocados. - R3 (Tratamento de Ponteiros Nulos): Nenhuma função pode causar crash (Segmentation Fault) caso receba argumentos nulos; retorne códigos de erro apropriados.
- R4 (Suíte de Testes Unitários): Implementar um arquivo
main.ccom asserções (assert) testando casos de borda (estrutura vazia, inserções unitárias, inserções em massa e remoções).
📐 3. Diagrama Conceitual da Estrutura
graph TD
Client["💻 Aplicação Cliente (main.c)"] -->|Interface Pública .h| TAD["📦 TAD: Pilhas (Stacks): Princípio LIFO e Aplicações"]
TAD -->|malloc / free| Heap["🧠 Heap de Memória (Nós Dinâmicos)"]
style Client fill:#e3f2fd,stroke:#1565c0
style TAD fill:#fff3e0,stroke:#e65100,stroke-width:2px
style Heap fill:#e8f5e9,stroke:#2e7d32
💻 4. Código Esqueleto de Partida
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
// Estrutura do projeto
int main(void) {
printf("Iniciando testes de Pilhas (Stacks): Princípio LIFO e Aplicações...\n");
// Inserir asserções de validação
printf("Todos os testes passaram com sucesso!\n");
return 0;
}
📦 5. Critérios de Avaliação
- Compilação limpa sem nenhum warning:
gcc -Wall -Wextra -pedantic main.c. - Execução sob o Valgrind comprovando zero vazamentos de memória (All heap blocks were freed -- no leaks are possible).
- Respeito rigoroso à complexidade assintótica estipulada na especificação teórica.
Projeto 09: Filas (Queues): Princípio FIFO, Fila Circular e Deque 🚀
Escopo do Desafio
Objetivo: Desenvolver uma biblioteca modular e reutilizável em linguagem C implementando o Tipo Abstrato de Dados correspondente a Filas (Queues): Princípio FIFO, Fila Circular e Deque.
🎯 1. Descrição do Problema
Você faz parte da equipe de engenharia de software de uma plataforma de processamento de alto volume. O sistema necessita de uma implementação de Filas (Queues): Princípio FIFO, Fila Circular e Deque que atenda aos mais altos requisitos de estabilidade, desempenho assintótico e robustez contra corrupção de memória.
📋 2. Requisitos Técnicos Obrigatórios
- R1 (Encapsulamento Estrito): Separar a interface pública em arquivo de cabeçalho (
.h) e a estrutura interna no arquivo de implementação (.c). - R2 (Gestão Dinâmica de Memória): Todas as operações de criação devem possuir sua respectiva função de destruição (
destruir), liberando recursivamente todos os nós alocados. - R3 (Tratamento de Ponteiros Nulos): Nenhuma função pode causar crash (Segmentation Fault) caso receba argumentos nulos; retorne códigos de erro apropriados.
- R4 (Suíte de Testes Unitários): Implementar um arquivo
main.ccom asserções (assert) testando casos de borda (estrutura vazia, inserções unitárias, inserções em massa e remoções).
📐 3. Diagrama Conceitual da Estrutura
graph TD
Client["💻 Aplicação Cliente (main.c)"] -->|Interface Pública .h| TAD["📦 TAD: Filas (Queues): Princípio FIFO, Fila Circular e Deque"]
TAD -->|malloc / free| Heap["🧠 Heap de Memória (Nós Dinâmicos)"]
style Client fill:#e3f2fd,stroke:#1565c0
style TAD fill:#fff3e0,stroke:#e65100,stroke-width:2px
style Heap fill:#e8f5e9,stroke:#2e7d32
💻 4. Código Esqueleto de Partida
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
// Estrutura do projeto
int main(void) {
printf("Iniciando testes de Filas (Queues): Princípio FIFO, Fila Circular e Deque...\n");
// Inserir asserções de validação
printf("Todos os testes passaram com sucesso!\n");
return 0;
}
📦 5. Critérios de Avaliação
- Compilação limpa sem nenhum warning:
gcc -Wall -Wextra -pedantic main.c. - Execução sob o Valgrind comprovando zero vazamentos de memória (All heap blocks were freed -- no leaks are possible).
- Respeito rigoroso à complexidade assintótica estipulada na especificação teórica.
Projeto 10: Recursão Aplicada, Pilha de Execução e Divisão e Conquista 🚀
Escopo do Desafio
Objetivo: Desenvolver uma biblioteca modular e reutilizável em linguagem C implementando o Tipo Abstrato de Dados correspondente a Recursão Aplicada, Pilha de Execução e Divisão e Conquista.
🎯 1. Descrição do Problema
Você faz parte da equipe de engenharia de software de uma plataforma de processamento de alto volume. O sistema necessita de uma implementação de Recursão Aplicada, Pilha de Execução e Divisão e Conquista que atenda aos mais altos requisitos de estabilidade, desempenho assintótico e robustez contra corrupção de memória.
📋 2. Requisitos Técnicos Obrigatórios
- R1 (Encapsulamento Estrito): Separar a interface pública em arquivo de cabeçalho (
.h) e a estrutura interna no arquivo de implementação (.c). - R2 (Gestão Dinâmica de Memória): Todas as operações de criação devem possuir sua respectiva função de destruição (
destruir), liberando recursivamente todos os nós alocados. - R3 (Tratamento de Ponteiros Nulos): Nenhuma função pode causar crash (Segmentation Fault) caso receba argumentos nulos; retorne códigos de erro apropriados.
- R4 (Suíte de Testes Unitários): Implementar um arquivo
main.ccom asserções (assert) testando casos de borda (estrutura vazia, inserções unitárias, inserções em massa e remoções).
📐 3. Diagrama Conceitual da Estrutura
graph TD
Client["💻 Aplicação Cliente (main.c)"] -->|Interface Pública .h| TAD["📦 TAD: Recursão Aplicada, Pilha de Execução e Divisão e Conquista"]
TAD -->|malloc / free| Heap["🧠 Heap de Memória (Nós Dinâmicos)"]
style Client fill:#e3f2fd,stroke:#1565c0
style TAD fill:#fff3e0,stroke:#e65100,stroke-width:2px
style Heap fill:#e8f5e9,stroke:#2e7d32
💻 4. Código Esqueleto de Partida
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
// Estrutura do projeto
int main(void) {
printf("Iniciando testes de Recursão Aplicada, Pilha de Execução e Divisão e Conquista...\n");
// Inserir asserções de validação
printf("Todos os testes passaram com sucesso!\n");
return 0;
}
📦 5. Critérios de Avaliação
- Compilação limpa sem nenhum warning:
gcc -Wall -Wextra -pedantic main.c. - Execução sob o Valgrind comprovando zero vazamentos de memória (All heap blocks were freed -- no leaks are possible).
- Respeito rigoroso à complexidade assintótica estipulada na especificação teórica.
Projeto 11: Algoritmos de Ordenação Elementares: Bubble, Selection e Insertion Sort 🚀
Escopo do Desafio
Objetivo: Desenvolver uma biblioteca modular e reutilizável em linguagem C implementando o Tipo Abstrato de Dados correspondente a Algoritmos de Ordenação Elementares: Bubble, Selection e Insertion Sort.
🎯 1. Descrição do Problema
Você faz parte da equipe de engenharia de software de uma plataforma de processamento de alto volume. O sistema necessita de uma implementação de Algoritmos de Ordenação Elementares: Bubble, Selection e Insertion Sort que atenda aos mais altos requisitos de estabilidade, desempenho assintótico e robustez contra corrupção de memória.
📋 2. Requisitos Técnicos Obrigatórios
- R1 (Encapsulamento Estrito): Separar a interface pública em arquivo de cabeçalho (
.h) e a estrutura interna no arquivo de implementação (.c). - R2 (Gestão Dinâmica de Memória): Todas as operações de criação devem possuir sua respectiva função de destruição (
destruir), liberando recursivamente todos os nós alocados. - R3 (Tratamento de Ponteiros Nulos): Nenhuma função pode causar crash (Segmentation Fault) caso receba argumentos nulos; retorne códigos de erro apropriados.
- R4 (Suíte de Testes Unitários): Implementar um arquivo
main.ccom asserções (assert) testando casos de borda (estrutura vazia, inserções unitárias, inserções em massa e remoções).
📐 3. Diagrama Conceitual da Estrutura
graph TD
Client["💻 Aplicação Cliente (main.c)"] -->|Interface Pública .h| TAD["📦 TAD: Algoritmos de Ordenação Elementares: Bubble, Selection e Insertion Sort"]
TAD -->|malloc / free| Heap["🧠 Heap de Memória (Nós Dinâmicos)"]
style Client fill:#e3f2fd,stroke:#1565c0
style TAD fill:#fff3e0,stroke:#e65100,stroke-width:2px
style Heap fill:#e8f5e9,stroke:#2e7d32
💻 4. Código Esqueleto de Partida
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
// Estrutura do projeto
int main(void) {
printf("Iniciando testes de Algoritmos de Ordenação Elementares: Bubble, Selection e Insertion Sort...\n");
// Inserir asserções de validação
printf("Todos os testes passaram com sucesso!\n");
return 0;
}
📦 5. Critérios de Avaliação
- Compilação limpa sem nenhum warning:
gcc -Wall -Wextra -pedantic main.c. - Execução sob o Valgrind comprovando zero vazamentos de memória (All heap blocks were freed -- no leaks are possible).
- Respeito rigoroso à complexidade assintótica estipulada na especificação teórica.
Projeto 12: Algoritmos de Ordenação Eficientes: MergeSort e QuickSort 🚀
Escopo do Desafio
Objetivo: Desenvolver uma biblioteca modular e reutilizável em linguagem C implementando o Tipo Abstrato de Dados correspondente a Algoritmos de Ordenação Eficientes: MergeSort e QuickSort.
🎯 1. Descrição do Problema
Você faz parte da equipe de engenharia de software de uma plataforma de processamento de alto volume. O sistema necessita de uma implementação de Algoritmos de Ordenação Eficientes: MergeSort e QuickSort que atenda aos mais altos requisitos de estabilidade, desempenho assintótico e robustez contra corrupção de memória.
📋 2. Requisitos Técnicos Obrigatórios
- R1 (Encapsulamento Estrito): Separar a interface pública em arquivo de cabeçalho (
.h) e a estrutura interna no arquivo de implementação (.c). - R2 (Gestão Dinâmica de Memória): Todas as operações de criação devem possuir sua respectiva função de destruição (
destruir), liberando recursivamente todos os nós alocados. - R3 (Tratamento de Ponteiros Nulos): Nenhuma função pode causar crash (Segmentation Fault) caso receba argumentos nulos; retorne códigos de erro apropriados.
- R4 (Suíte de Testes Unitários): Implementar um arquivo
main.ccom asserções (assert) testando casos de borda (estrutura vazia, inserções unitárias, inserções em massa e remoções).
📐 3. Diagrama Conceitual da Estrutura
graph TD
Client["💻 Aplicação Cliente (main.c)"] -->|Interface Pública .h| TAD["📦 TAD: Algoritmos de Ordenação Eficientes: MergeSort e QuickSort"]
TAD -->|malloc / free| Heap["🧠 Heap de Memória (Nós Dinâmicos)"]
style Client fill:#e3f2fd,stroke:#1565c0
style TAD fill:#fff3e0,stroke:#e65100,stroke-width:2px
style Heap fill:#e8f5e9,stroke:#2e7d32
💻 4. Código Esqueleto de Partida
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
// Estrutura do projeto
int main(void) {
printf("Iniciando testes de Algoritmos de Ordenação Eficientes: MergeSort e QuickSort...\n");
// Inserir asserções de validação
printf("Todos os testes passaram com sucesso!\n");
return 0;
}
📦 5. Critérios de Avaliação
- Compilação limpa sem nenhum warning:
gcc -Wall -Wextra -pedantic main.c. - Execução sob o Valgrind comprovando zero vazamentos de memória (All heap blocks were freed -- no leaks are possible).
- Respeito rigoroso à complexidade assintótica estipulada na especificação teórica.
Projeto 13: Árvores Binárias e Árvores de Busca Binária (BST) 🚀
Escopo do Desafio
Objetivo: Desenvolver uma biblioteca modular e reutilizável em linguagem C implementando o Tipo Abstrato de Dados correspondente a Árvores Binárias e Árvores de Busca Binária (BST).
🎯 1. Descrição do Problema
Você faz parte da equipe de engenharia de software de uma plataforma de processamento de alto volume. O sistema necessita de uma implementação de Árvores Binárias e Árvores de Busca Binária (BST) que atenda aos mais altos requisitos de estabilidade, desempenho assintótico e robustez contra corrupção de memória.
📋 2. Requisitos Técnicos Obrigatórios
- R1 (Encapsulamento Estrito): Separar a interface pública em arquivo de cabeçalho (
.h) e a estrutura interna no arquivo de implementação (.c). - R2 (Gestão Dinâmica de Memória): Todas as operações de criação devem possuir sua respectiva função de destruição (
destruir), liberando recursivamente todos os nós alocados. - R3 (Tratamento de Ponteiros Nulos): Nenhuma função pode causar crash (Segmentation Fault) caso receba argumentos nulos; retorne códigos de erro apropriados.
- R4 (Suíte de Testes Unitários): Implementar um arquivo
main.ccom asserções (assert) testando casos de borda (estrutura vazia, inserções unitárias, inserções em massa e remoções).
📐 3. Diagrama Conceitual da Estrutura
graph TD
Client["💻 Aplicação Cliente (main.c)"] -->|Interface Pública .h| TAD["📦 TAD: Árvores Binárias e Árvores de Busca Binária (BST)"]
TAD -->|malloc / free| Heap["🧠 Heap de Memória (Nós Dinâmicos)"]
style Client fill:#e3f2fd,stroke:#1565c0
style TAD fill:#fff3e0,stroke:#e65100,stroke-width:2px
style Heap fill:#e8f5e9,stroke:#2e7d32
💻 4. Código Esqueleto de Partida
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
// Estrutura do projeto
int main(void) {
printf("Iniciando testes de Árvores Binárias e Árvores de Busca Binária (BST)...\n");
// Inserir asserções de validação
printf("Todos os testes passaram com sucesso!\n");
return 0;
}
📦 5. Critérios de Avaliação
- Compilação limpa sem nenhum warning:
gcc -Wall -Wextra -pedantic main.c. - Execução sob o Valgrind comprovando zero vazamentos de memória (All heap blocks were freed -- no leaks are possible).
- Respeito rigoroso à complexidade assintótica estipulada na especificação teórica.
Projeto 14: Tabelas Hash: Funções de Espalhamento e Resolução de Colisões 🚀
Escopo do Desafio
Objetivo: Desenvolver uma biblioteca modular e reutilizável em linguagem C implementando o Tipo Abstrato de Dados correspondente a Tabelas Hash: Funções de Espalhamento e Resolução de Colisões.
🎯 1. Descrição do Problema
Você faz parte da equipe de engenharia de software de uma plataforma de processamento de alto volume. O sistema necessita de uma implementação de Tabelas Hash: Funções de Espalhamento e Resolução de Colisões que atenda aos mais altos requisitos de estabilidade, desempenho assintótico e robustez contra corrupção de memória.
📋 2. Requisitos Técnicos Obrigatórios
- R1 (Encapsulamento Estrito): Separar a interface pública em arquivo de cabeçalho (
.h) e a estrutura interna no arquivo de implementação (.c). - R2 (Gestão Dinâmica de Memória): Todas as operações de criação devem possuir sua respectiva função de destruição (
destruir), liberando recursivamente todos os nós alocados. - R3 (Tratamento de Ponteiros Nulos): Nenhuma função pode causar crash (Segmentation Fault) caso receba argumentos nulos; retorne códigos de erro apropriados.
- R4 (Suíte de Testes Unitários): Implementar um arquivo
main.ccom asserções (assert) testando casos de borda (estrutura vazia, inserções unitárias, inserções em massa e remoções).
📐 3. Diagrama Conceitual da Estrutura
graph TD
Client["💻 Aplicação Cliente (main.c)"] -->|Interface Pública .h| TAD["📦 TAD: Tabelas Hash: Funções de Espalhamento e Resolução de Colisões"]
TAD -->|malloc / free| Heap["🧠 Heap de Memória (Nós Dinâmicos)"]
style Client fill:#e3f2fd,stroke:#1565c0
style TAD fill:#fff3e0,stroke:#e65100,stroke-width:2px
style Heap fill:#e8f5e9,stroke:#2e7d32
💻 4. Código Esqueleto de Partida
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
// Estrutura do projeto
int main(void) {
printf("Iniciando testes de Tabelas Hash: Funções de Espalhamento e Resolução de Colisões...\n");
// Inserir asserções de validação
printf("Todos os testes passaram com sucesso!\n");
return 0;
}
📦 5. Critérios de Avaliação
- Compilação limpa sem nenhum warning:
gcc -Wall -Wextra -pedantic main.c. - Execução sob o Valgrind comprovando zero vazamentos de memória (All heap blocks were freed -- no leaks are possible).
- Respeito rigoroso à complexidade assintótica estipulada na especificação teórica.
Projeto 15: Heaps Binários e Filas de Prioridade (Priority Queues) 🚀
Escopo do Desafio
Objetivo: Desenvolver uma biblioteca modular e reutilizável em linguagem C implementando o Tipo Abstrato de Dados correspondente a Heaps Binários e Filas de Prioridade (Priority Queues).
🎯 1. Descrição do Problema
Você faz parte da equipe de engenharia de software de uma plataforma de processamento de alto volume. O sistema necessita de uma implementação de Heaps Binários e Filas de Prioridade (Priority Queues) que atenda aos mais altos requisitos de estabilidade, desempenho assintótico e robustez contra corrupção de memória.
📋 2. Requisitos Técnicos Obrigatórios
- R1 (Encapsulamento Estrito): Separar a interface pública em arquivo de cabeçalho (
.h) e a estrutura interna no arquivo de implementação (.c). - R2 (Gestão Dinâmica de Memória): Todas as operações de criação devem possuir sua respectiva função de destruição (
destruir), liberando recursivamente todos os nós alocados. - R3 (Tratamento de Ponteiros Nulos): Nenhuma função pode causar crash (Segmentation Fault) caso receba argumentos nulos; retorne códigos de erro apropriados.
- R4 (Suíte de Testes Unitários): Implementar um arquivo
main.ccom asserções (assert) testando casos de borda (estrutura vazia, inserções unitárias, inserções em massa e remoções).
📐 3. Diagrama Conceitual da Estrutura
graph TD
Client["💻 Aplicação Cliente (main.c)"] -->|Interface Pública .h| TAD["📦 TAD: Heaps Binários e Filas de Prioridade (Priority Queues)"]
TAD -->|malloc / free| Heap["🧠 Heap de Memória (Nós Dinâmicos)"]
style Client fill:#e3f2fd,stroke:#1565c0
style TAD fill:#fff3e0,stroke:#e65100,stroke-width:2px
style Heap fill:#e8f5e9,stroke:#2e7d32
💻 4. Código Esqueleto de Partida
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
// Estrutura do projeto
int main(void) {
printf("Iniciando testes de Heaps Binários e Filas de Prioridade (Priority Queues)...\n");
// Inserir asserções de validação
printf("Todos os testes passaram com sucesso!\n");
return 0;
}
📦 5. Critérios de Avaliação
- Compilação limpa sem nenhum warning:
gcc -Wall -Wextra -pedantic main.c. - Execução sob o Valgrind comprovando zero vazamentos de memória (All heap blocks were freed -- no leaks are possible).
- Respeito rigoroso à complexidade assintótica estipulada na especificação teórica.
Projeto 16: Introdução aos Grafos: Representação e Algoritmos de Busca 🚀
Escopo do Desafio
Objetivo: Desenvolver uma biblioteca modular e reutilizável em linguagem C implementando o Tipo Abstrato de Dados correspondente a Introdução aos Grafos: Representação e Algoritmos de Busca.
🎯 1. Descrição do Problema
Você faz parte da equipe de engenharia de software de uma plataforma de processamento de alto volume. O sistema necessita de uma implementação de Introdução aos Grafos: Representação e Algoritmos de Busca que atenda aos mais altos requisitos de estabilidade, desempenho assintótico e robustez contra corrupção de memória.
📋 2. Requisitos Técnicos Obrigatórios
- R1 (Encapsulamento Estrito): Separar a interface pública em arquivo de cabeçalho (
.h) e a estrutura interna no arquivo de implementação (.c). - R2 (Gestão Dinâmica de Memória): Todas as operações de criação devem possuir sua respectiva função de destruição (
destruir), liberando recursivamente todos os nós alocados. - R3 (Tratamento de Ponteiros Nulos): Nenhuma função pode causar crash (Segmentation Fault) caso receba argumentos nulos; retorne códigos de erro apropriados.
- R4 (Suíte de Testes Unitários): Implementar um arquivo
main.ccom asserções (assert) testando casos de borda (estrutura vazia, inserções unitárias, inserções em massa e remoções).
📐 3. Diagrama Conceitual da Estrutura
graph TD
Client["💻 Aplicação Cliente (main.c)"] -->|Interface Pública .h| TAD["📦 TAD: Introdução aos Grafos: Representação e Algoritmos de Busca"]
TAD -->|malloc / free| Heap["🧠 Heap de Memória (Nós Dinâmicos)"]
style Client fill:#e3f2fd,stroke:#1565c0
style TAD fill:#fff3e0,stroke:#e65100,stroke-width:2px
style Heap fill:#e8f5e9,stroke:#2e7d32
💻 4. Código Esqueleto de Partida
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
// Estrutura do projeto
int main(void) {
printf("Iniciando testes de Introdução aos Grafos: Representação e Algoritmos de Busca...\n");
// Inserir asserções de validação
printf("Todos os testes passaram com sucesso!\n");
return 0;
}
📦 5. Critérios de Avaliação
- Compilação limpa sem nenhum warning:
gcc -Wall -Wextra -pedantic main.c. - Execução sob o Valgrind comprovando zero vazamentos de memória (All heap blocks were freed -- no leaks are possible).
- Respeito rigoroso à complexidade assintótica estipulada na especificação teórica.
Quizzes
🧠 Quizzes de Fixação
Lista completa das 20 unidades de quizzes organizadas em 5 módulos didáticos.
-
Módulo 1: Fundamentos (01 a 04) ---
-
Módulo 2: Conceitos Essenciais (05 a 08) ---
-
Módulo 3: Aplicação Prática (09 a 12) ---
-
Módulo 4: Padrões e Ferramentas (13 a 16) ---
-
Módulo 5: Avançado e Capstone (17 a 20) ---
🧠 Quiz 01 – Introdução às Estruturas de Dados e Tipos Abstratos de Dados (TAD)
- Qual é o conceito fundamental abordado em Introdução às Estruturas de Dados e Tipos Abstratos de Dados (TAD)?
- ( ) Permitir vazamento descontrolado de ponteiros na memória física.
- (x) Organizar, armazenar e manipular dados de forma determinística e com eficiência assintótica.
- ( ) Desabilitar a checagem de limites em arrays estáticos.
-
( ) Forçar o uso exclusivo de variáveis globais para comunicação entre funções.
-
Qual a principal função da função
free()em linguagem C? - (x) Devolver ao sistema operacional a memória previamente alocada na heap via malloc/calloc.
- ( ) Apagar o código-fonte gravado em disco.
- ( ) Aumentar a velocidade do clock do processador.
-
( ) Duplicar automaticamente a capacidade de vetores estáticos.
-
O que caracteriza um Memory Leak (vazamento de memória)?
- ( ) Uma falha física nos pentes de memória RAM.
- (x) Memória alocada dinamicamente na heap que perdeu todas as referências de ponteiro sem ter sido liberada via free().
- ( ) Acesso a uma posição de índice negativo em um vetor.
-
( ) Inclusão de bibliotecas com a diretiva #include.
-
Em relação à notação Big-O, o que representa \(O(1)\)?
- (x) Complexidade de tempo constante, independente da quantidade de elementos de entrada.
- ( ) Complexidade linear onde o tempo é diretamente proporcional a N.
- ( ) Complexidade exponencial com alto custo de processamento.
-
( ) Falha no algoritmo por falta de convergência.
-
Qual é a vantagem primária de uma Lista Encadeada sobre um Vetor Estático?
- ( ) Acesso aleatório por índice em tempo O(1).
- (x) Alocação dinâmica sob demanda e inserção/remoção em O(1) sem necessidade de realocação contígua.
- ( ) Menor consumo total de memória devido à ausência de ponteiros.
-
( ) Garantia de que todos os nós estão contíguos no cache de hardware.
-
Qual o princípio de funcionamento fundamental de uma Pilha (Stack)?
- ( ) FIFO (First-In, First-Out).
- (x) LIFO (Last-In, First-Out).
- ( ) Acesso aleatório por chave hash.
-
( ) Ordenação automática por valor decrescente.
-
Qual o princípio de funcionamento fundamental de uma Fila (Queue)?
- (x) FIFO (First-In, First-Out).
- ( ) LIFO (Last-In, First-Out).
- ( ) Inversão sequencial permanente.
-
( ) Acesso hierárquico por árvore de decisão.
-
O que caracteriza uma Árvore de Busca Binária (BST) válida?
- ( ) Todos os nós possuem obrigatoriamente 3 filhos.
- (x) Para cada nó, todos os valores da subárvore esquerda são menores e os da subárvore direita são maiores.
- ( ) A altura de todas as folhas é sempre idêntica e constante.
-
( ) Não permite operações de busca por chave.
-
Em uma Tabela Hash, o que é uma colisão?
- ( ) Um erro fatal que interrompe a execução do sistema operacional.
- (x) O evento no qual duas chaves distintas geram o mesmo índice após a aplicação da função hash.
- ( ) A tentativa de armazenar um número de ponto flutuante em uma variável inteira.
-
( ) O esgotamento do espaço de endereçamento de 64 bits.
-
Qual a complexidade assintótica média de busca em uma Tabela Hash bem projetada?
- ( ) \(O(n^2)\)
- ( ) \(O(n \log n)\)
- (x) \(O(1)\)
- ( ) \(O(n!)\)
🧠 Quiz 02 – Ponteiros, Alocação Dinâmica e Gestão de Memória na Heap
- Qual é o conceito fundamental abordado em Ponteiros, Alocação Dinâmica e Gestão de Memória na Heap?
- ( ) Permitir vazamento descontrolado de ponteiros na memória física.
- (x) Organizar, armazenar e manipular dados de forma determinística e com eficiência assintótica.
- ( ) Desabilitar a checagem de limites em arrays estáticos.
-
( ) Forçar o uso exclusivo de variáveis globais para comunicação entre funções.
-
Qual a principal função da função
free()em linguagem C? - (x) Devolver ao sistema operacional a memória previamente alocada na heap via malloc/calloc.
- ( ) Apagar o código-fonte gravado em disco.
- ( ) Aumentar a velocidade do clock do processador.
-
( ) Duplicar automaticamente a capacidade de vetores estáticos.
-
O que caracteriza um Memory Leak (vazamento de memória)?
- ( ) Uma falha física nos pentes de memória RAM.
- (x) Memória alocada dinamicamente na heap que perdeu todas as referências de ponteiro sem ter sido liberada via free().
- ( ) Acesso a uma posição de índice negativo em um vetor.
-
( ) Inclusão de bibliotecas com a diretiva #include.
-
Em relação à notação Big-O, o que representa \(O(1)\)?
- (x) Complexidade de tempo constante, independente da quantidade de elementos de entrada.
- ( ) Complexidade linear onde o tempo é diretamente proporcional a N.
- ( ) Complexidade exponencial com alto custo de processamento.
-
( ) Falha no algoritmo por falta de convergência.
-
Qual é a vantagem primária de uma Lista Encadeada sobre um Vetor Estático?
- ( ) Acesso aleatório por índice em tempo O(1).
- (x) Alocação dinâmica sob demanda e inserção/remoção em O(1) sem necessidade de realocação contígua.
- ( ) Menor consumo total de memória devido à ausência de ponteiros.
-
( ) Garantia de que todos os nós estão contíguos no cache de hardware.
-
Qual o princípio de funcionamento fundamental de uma Pilha (Stack)?
- ( ) FIFO (First-In, First-Out).
- (x) LIFO (Last-In, First-Out).
- ( ) Acesso aleatório por chave hash.
-
( ) Ordenação automática por valor decrescente.
-
Qual o princípio de funcionamento fundamental de uma Fila (Queue)?
- (x) FIFO (First-In, First-Out).
- ( ) LIFO (Last-In, First-Out).
- ( ) Inversão sequencial permanente.
-
( ) Acesso hierárquico por árvore de decisão.
-
O que caracteriza uma Árvore de Busca Binária (BST) válida?
- ( ) Todos os nós possuem obrigatoriamente 3 filhos.
- (x) Para cada nó, todos os valores da subárvore esquerda são menores e os da subárvore direita são maiores.
- ( ) A altura de todas as folhas é sempre idêntica e constante.
-
( ) Não permite operações de busca por chave.
-
Em uma Tabela Hash, o que é uma colisão?
- ( ) Um erro fatal que interrompe a execução do sistema operacional.
- (x) O evento no qual duas chaves distintas geram o mesmo índice após a aplicação da função hash.
- ( ) A tentativa de armazenar um número de ponto flutuante em uma variável inteira.
-
( ) O esgotamento do espaço de endereçamento de 64 bits.
-
Qual a complexidade assintótica média de busca em uma Tabela Hash bem projetada?
- ( ) \(O(n^2)\)
- ( ) \(O(n \log n)\)
- (x) \(O(1)\)
- ( ) \(O(n!)\)
🧠 Quiz 03 – Vetores Dinâmicos e Redimensionamento Amortizado
- Qual é o conceito fundamental abordado em Vetores Dinâmicos e Redimensionamento Amortizado?
- ( ) Permitir vazamento descontrolado de ponteiros na memória física.
- (x) Organizar, armazenar e manipular dados de forma determinística e com eficiência assintótica.
- ( ) Desabilitar a checagem de limites em arrays estáticos.
-
( ) Forçar o uso exclusivo de variáveis globais para comunicação entre funções.
-
Qual a principal função da função
free()em linguagem C? - (x) Devolver ao sistema operacional a memória previamente alocada na heap via malloc/calloc.
- ( ) Apagar o código-fonte gravado em disco.
- ( ) Aumentar a velocidade do clock do processador.
-
( ) Duplicar automaticamente a capacidade de vetores estáticos.
-
O que caracteriza um Memory Leak (vazamento de memória)?
- ( ) Uma falha física nos pentes de memória RAM.
- (x) Memória alocada dinamicamente na heap que perdeu todas as referências de ponteiro sem ter sido liberada via free().
- ( ) Acesso a uma posição de índice negativo em um vetor.
-
( ) Inclusão de bibliotecas com a diretiva #include.
-
Em relação à notação Big-O, o que representa \(O(1)\)?
- (x) Complexidade de tempo constante, independente da quantidade de elementos de entrada.
- ( ) Complexidade linear onde o tempo é diretamente proporcional a N.
- ( ) Complexidade exponencial com alto custo de processamento.
-
( ) Falha no algoritmo por falta de convergência.
-
Qual é a vantagem primária de uma Lista Encadeada sobre um Vetor Estático?
- ( ) Acesso aleatório por índice em tempo O(1).
- (x) Alocação dinâmica sob demanda e inserção/remoção em O(1) sem necessidade de realocação contígua.
- ( ) Menor consumo total de memória devido à ausência de ponteiros.
-
( ) Garantia de que todos os nós estão contíguos no cache de hardware.
-
Qual o princípio de funcionamento fundamental de uma Pilha (Stack)?
- ( ) FIFO (First-In, First-Out).
- (x) LIFO (Last-In, First-Out).
- ( ) Acesso aleatório por chave hash.
-
( ) Ordenação automática por valor decrescente.
-
Qual o princípio de funcionamento fundamental de uma Fila (Queue)?
- (x) FIFO (First-In, First-Out).
- ( ) LIFO (Last-In, First-Out).
- ( ) Inversão sequencial permanente.
-
( ) Acesso hierárquico por árvore de decisão.
-
O que caracteriza uma Árvore de Busca Binária (BST) válida?
- ( ) Todos os nós possuem obrigatoriamente 3 filhos.
- (x) Para cada nó, todos os valores da subárvore esquerda são menores e os da subárvore direita são maiores.
- ( ) A altura de todas as folhas é sempre idêntica e constante.
-
( ) Não permite operações de busca por chave.
-
Em uma Tabela Hash, o que é uma colisão?
- ( ) Um erro fatal que interrompe a execução do sistema operacional.
- (x) O evento no qual duas chaves distintas geram o mesmo índice após a aplicação da função hash.
- ( ) A tentativa de armazenar um número de ponto flutuante em uma variável inteira.
-
( ) O esgotamento do espaço de endereçamento de 64 bits.
-
Qual a complexidade assintótica média de busca em uma Tabela Hash bem projetada?
- ( ) \(O(n^2)\)
- ( ) \(O(n \log n)\)
- (x) \(O(1)\)
- ( ) \(O(n!)\)
🧠 Quiz 04 – Matrizes e Mapeamento Linear na Memória
- Qual é o conceito fundamental abordado em Matrizes e Mapeamento Linear na Memória?
- ( ) Permitir vazamento descontrolado de ponteiros na memória física.
- (x) Organizar, armazenar e manipular dados de forma determinística e com eficiência assintótica.
- ( ) Desabilitar a checagem de limites em arrays estáticos.
-
( ) Forçar o uso exclusivo de variáveis globais para comunicação entre funções.
-
Qual a principal função da função
free()em linguagem C? - (x) Devolver ao sistema operacional a memória previamente alocada na heap via malloc/calloc.
- ( ) Apagar o código-fonte gravado em disco.
- ( ) Aumentar a velocidade do clock do processador.
-
( ) Duplicar automaticamente a capacidade de vetores estáticos.
-
O que caracteriza um Memory Leak (vazamento de memória)?
- ( ) Uma falha física nos pentes de memória RAM.
- (x) Memória alocada dinamicamente na heap que perdeu todas as referências de ponteiro sem ter sido liberada via free().
- ( ) Acesso a uma posição de índice negativo em um vetor.
-
( ) Inclusão de bibliotecas com a diretiva #include.
-
Em relação à notação Big-O, o que representa \(O(1)\)?
- (x) Complexidade de tempo constante, independente da quantidade de elementos de entrada.
- ( ) Complexidade linear onde o tempo é diretamente proporcional a N.
- ( ) Complexidade exponencial com alto custo de processamento.
-
( ) Falha no algoritmo por falta de convergência.
-
Qual é a vantagem primária de uma Lista Encadeada sobre um Vetor Estático?
- ( ) Acesso aleatório por índice em tempo O(1).
- (x) Alocação dinâmica sob demanda e inserção/remoção em O(1) sem necessidade de realocação contígua.
- ( ) Menor consumo total de memória devido à ausência de ponteiros.
-
( ) Garantia de que todos os nós estão contíguos no cache de hardware.
-
Qual o princípio de funcionamento fundamental de uma Pilha (Stack)?
- ( ) FIFO (First-In, First-Out).
- (x) LIFO (Last-In, First-Out).
- ( ) Acesso aleatório por chave hash.
-
( ) Ordenação automática por valor decrescente.
-
Qual o princípio de funcionamento fundamental de uma Fila (Queue)?
- (x) FIFO (First-In, First-Out).
- ( ) LIFO (Last-In, First-Out).
- ( ) Inversão sequencial permanente.
-
( ) Acesso hierárquico por árvore de decisão.
-
O que caracteriza uma Árvore de Busca Binária (BST) válida?
- ( ) Todos os nós possuem obrigatoriamente 3 filhos.
- (x) Para cada nó, todos os valores da subárvore esquerda são menores e os da subárvore direita são maiores.
- ( ) A altura de todas as folhas é sempre idêntica e constante.
-
( ) Não permite operações de busca por chave.
-
Em uma Tabela Hash, o que é uma colisão?
- ( ) Um erro fatal que interrompe a execução do sistema operacional.
- (x) O evento no qual duas chaves distintas geram o mesmo índice após a aplicação da função hash.
- ( ) A tentativa de armazenar um número de ponto flutuante em uma variável inteira.
-
( ) O esgotamento do espaço de endereçamento de 64 bits.
-
Qual a complexidade assintótica média de busca em uma Tabela Hash bem projetada?
- ( ) \(O(n^2)\)
- ( ) \(O(n \log n)\)
- (x) \(O(1)\)
- ( ) \(O(n!)\)
🧠 Quiz 05 – Análise Assintótica de Complexidade (Notação Big-O)
- Qual é o conceito fundamental abordado em Análise Assintótica de Complexidade (Notação Big-O)?
- ( ) Permitir vazamento descontrolado de ponteiros na memória física.
- (x) Organizar, armazenar e manipular dados de forma determinística e com eficiência assintótica.
- ( ) Desabilitar a checagem de limites em arrays estáticos.
-
( ) Forçar o uso exclusivo de variáveis globais para comunicação entre funções.
-
Qual a principal função da função
free()em linguagem C? - (x) Devolver ao sistema operacional a memória previamente alocada na heap via malloc/calloc.
- ( ) Apagar o código-fonte gravado em disco.
- ( ) Aumentar a velocidade do clock do processador.
-
( ) Duplicar automaticamente a capacidade de vetores estáticos.
-
O que caracteriza um Memory Leak (vazamento de memória)?
- ( ) Uma falha física nos pentes de memória RAM.
- (x) Memória alocada dinamicamente na heap que perdeu todas as referências de ponteiro sem ter sido liberada via free().
- ( ) Acesso a uma posição de índice negativo em um vetor.
-
( ) Inclusão de bibliotecas com a diretiva #include.
-
Em relação à notação Big-O, o que representa \(O(1)\)?
- (x) Complexidade de tempo constante, independente da quantidade de elementos de entrada.
- ( ) Complexidade linear onde o tempo é diretamente proporcional a N.
- ( ) Complexidade exponencial com alto custo de processamento.
-
( ) Falha no algoritmo por falta de convergência.
-
Qual é a vantagem primária de uma Lista Encadeada sobre um Vetor Estático?
- ( ) Acesso aleatório por índice em tempo O(1).
- (x) Alocação dinâmica sob demanda e inserção/remoção em O(1) sem necessidade de realocação contígua.
- ( ) Menor consumo total de memória devido à ausência de ponteiros.
-
( ) Garantia de que todos os nós estão contíguos no cache de hardware.
-
Qual o princípio de funcionamento fundamental de uma Pilha (Stack)?
- ( ) FIFO (First-In, First-Out).
- (x) LIFO (Last-In, First-Out).
- ( ) Acesso aleatório por chave hash.
-
( ) Ordenação automática por valor decrescente.
-
Qual o princípio de funcionamento fundamental de uma Fila (Queue)?
- (x) FIFO (First-In, First-Out).
- ( ) LIFO (Last-In, First-Out).
- ( ) Inversão sequencial permanente.
-
( ) Acesso hierárquico por árvore de decisão.
-
O que caracteriza uma Árvore de Busca Binária (BST) válida?
- ( ) Todos os nós possuem obrigatoriamente 3 filhos.
- (x) Para cada nó, todos os valores da subárvore esquerda são menores e os da subárvore direita são maiores.
- ( ) A altura de todas as folhas é sempre idêntica e constante.
-
( ) Não permite operações de busca por chave.
-
Em uma Tabela Hash, o que é uma colisão?
- ( ) Um erro fatal que interrompe a execução do sistema operacional.
- (x) O evento no qual duas chaves distintas geram o mesmo índice após a aplicação da função hash.
- ( ) A tentativa de armazenar um número de ponto flutuante em uma variável inteira.
-
( ) O esgotamento do espaço de endereçamento de 64 bits.
-
Qual a complexidade assintótica média de busca em uma Tabela Hash bem projetada?
- ( ) \(O(n^2)\)
- ( ) \(O(n \log n)\)
- (x) \(O(1)\)
- ( ) \(O(n!)\)
🧠 Quiz 06 – Listas Simplesmente Encadeadas
- Qual é o conceito fundamental abordado em Listas Simplesmente Encadeadas?
- ( ) Permitir vazamento descontrolado de ponteiros na memória física.
- (x) Organizar, armazenar e manipular dados de forma determinística e com eficiência assintótica.
- ( ) Desabilitar a checagem de limites em arrays estáticos.
-
( ) Forçar o uso exclusivo de variáveis globais para comunicação entre funções.
-
Qual a principal função da função
free()em linguagem C? - (x) Devolver ao sistema operacional a memória previamente alocada na heap via malloc/calloc.
- ( ) Apagar o código-fonte gravado em disco.
- ( ) Aumentar a velocidade do clock do processador.
-
( ) Duplicar automaticamente a capacidade de vetores estáticos.
-
O que caracteriza um Memory Leak (vazamento de memória)?
- ( ) Uma falha física nos pentes de memória RAM.
- (x) Memória alocada dinamicamente na heap que perdeu todas as referências de ponteiro sem ter sido liberada via free().
- ( ) Acesso a uma posição de índice negativo em um vetor.
-
( ) Inclusão de bibliotecas com a diretiva #include.
-
Em relação à notação Big-O, o que representa \(O(1)\)?
- (x) Complexidade de tempo constante, independente da quantidade de elementos de entrada.
- ( ) Complexidade linear onde o tempo é diretamente proporcional a N.
- ( ) Complexidade exponencial com alto custo de processamento.
-
( ) Falha no algoritmo por falta de convergência.
-
Qual é a vantagem primária de uma Lista Encadeada sobre um Vetor Estático?
- ( ) Acesso aleatório por índice em tempo O(1).
- (x) Alocação dinâmica sob demanda e inserção/remoção em O(1) sem necessidade de realocação contígua.
- ( ) Menor consumo total de memória devido à ausência de ponteiros.
-
( ) Garantia de que todos os nós estão contíguos no cache de hardware.
-
Qual o princípio de funcionamento fundamental de uma Pilha (Stack)?
- ( ) FIFO (First-In, First-Out).
- (x) LIFO (Last-In, First-Out).
- ( ) Acesso aleatório por chave hash.
-
( ) Ordenação automática por valor decrescente.
-
Qual o princípio de funcionamento fundamental de uma Fila (Queue)?
- (x) FIFO (First-In, First-Out).
- ( ) LIFO (Last-In, First-Out).
- ( ) Inversão sequencial permanente.
-
( ) Acesso hierárquico por árvore de decisão.
-
O que caracteriza uma Árvore de Busca Binária (BST) válida?
- ( ) Todos os nós possuem obrigatoriamente 3 filhos.
- (x) Para cada nó, todos os valores da subárvore esquerda são menores e os da subárvore direita são maiores.
- ( ) A altura de todas as folhas é sempre idêntica e constante.
-
( ) Não permite operações de busca por chave.
-
Em uma Tabela Hash, o que é uma colisão?
- ( ) Um erro fatal que interrompe a execução do sistema operacional.
- (x) O evento no qual duas chaves distintas geram o mesmo índice após a aplicação da função hash.
- ( ) A tentativa de armazenar um número de ponto flutuante em uma variável inteira.
-
( ) O esgotamento do espaço de endereçamento de 64 bits.
-
Qual a complexidade assintótica média de busca em uma Tabela Hash bem projetada?
- ( ) \(O(n^2)\)
- ( ) \(O(n \log n)\)
- (x) \(O(1)\)
- ( ) \(O(n!)\)
🧠 Quiz 07 – Listas Duplamente Encadeadas e Listas Circulares
- Qual é o conceito fundamental abordado em Listas Duplamente Encadeadas e Listas Circulares?
- ( ) Permitir vazamento descontrolado de ponteiros na memória física.
- (x) Organizar, armazenar e manipular dados de forma determinística e com eficiência assintótica.
- ( ) Desabilitar a checagem de limites em arrays estáticos.
-
( ) Forçar o uso exclusivo de variáveis globais para comunicação entre funções.
-
Qual a principal função da função
free()em linguagem C? - (x) Devolver ao sistema operacional a memória previamente alocada na heap via malloc/calloc.
- ( ) Apagar o código-fonte gravado em disco.
- ( ) Aumentar a velocidade do clock do processador.
-
( ) Duplicar automaticamente a capacidade de vetores estáticos.
-
O que caracteriza um Memory Leak (vazamento de memória)?
- ( ) Uma falha física nos pentes de memória RAM.
- (x) Memória alocada dinamicamente na heap que perdeu todas as referências de ponteiro sem ter sido liberada via free().
- ( ) Acesso a uma posição de índice negativo em um vetor.
-
( ) Inclusão de bibliotecas com a diretiva #include.
-
Em relação à notação Big-O, o que representa \(O(1)\)?
- (x) Complexidade de tempo constante, independente da quantidade de elementos de entrada.
- ( ) Complexidade linear onde o tempo é diretamente proporcional a N.
- ( ) Complexidade exponencial com alto custo de processamento.
-
( ) Falha no algoritmo por falta de convergência.
-
Qual é a vantagem primária de uma Lista Encadeada sobre um Vetor Estático?
- ( ) Acesso aleatório por índice em tempo O(1).
- (x) Alocação dinâmica sob demanda e inserção/remoção em O(1) sem necessidade de realocação contígua.
- ( ) Menor consumo total de memória devido à ausência de ponteiros.
-
( ) Garantia de que todos os nós estão contíguos no cache de hardware.
-
Qual o princípio de funcionamento fundamental de uma Pilha (Stack)?
- ( ) FIFO (First-In, First-Out).
- (x) LIFO (Last-In, First-Out).
- ( ) Acesso aleatório por chave hash.
-
( ) Ordenação automática por valor decrescente.
-
Qual o princípio de funcionamento fundamental de uma Fila (Queue)?
- (x) FIFO (First-In, First-Out).
- ( ) LIFO (Last-In, First-Out).
- ( ) Inversão sequencial permanente.
-
( ) Acesso hierárquico por árvore de decisão.
-
O que caracteriza uma Árvore de Busca Binária (BST) válida?
- ( ) Todos os nós possuem obrigatoriamente 3 filhos.
- (x) Para cada nó, todos os valores da subárvore esquerda são menores e os da subárvore direita são maiores.
- ( ) A altura de todas as folhas é sempre idêntica e constante.
-
( ) Não permite operações de busca por chave.
-
Em uma Tabela Hash, o que é uma colisão?
- ( ) Um erro fatal que interrompe a execução do sistema operacional.
- (x) O evento no qual duas chaves distintas geram o mesmo índice após a aplicação da função hash.
- ( ) A tentativa de armazenar um número de ponto flutuante em uma variável inteira.
-
( ) O esgotamento do espaço de endereçamento de 64 bits.
-
Qual a complexidade assintótica média de busca em uma Tabela Hash bem projetada?
- ( ) \(O(n^2)\)
- ( ) \(O(n \log n)\)
- (x) \(O(1)\)
- ( ) \(O(n!)\)
🧠 Quiz 08 – Pilhas (Stacks): Princípio LIFO e Aplicações
- Qual é o conceito fundamental abordado em Pilhas (Stacks): Princípio LIFO e Aplicações?
- ( ) Permitir vazamento descontrolado de ponteiros na memória física.
- (x) Organizar, armazenar e manipular dados de forma determinística e com eficiência assintótica.
- ( ) Desabilitar a checagem de limites em arrays estáticos.
-
( ) Forçar o uso exclusivo de variáveis globais para comunicação entre funções.
-
Qual a principal função da função
free()em linguagem C? - (x) Devolver ao sistema operacional a memória previamente alocada na heap via malloc/calloc.
- ( ) Apagar o código-fonte gravado em disco.
- ( ) Aumentar a velocidade do clock do processador.
-
( ) Duplicar automaticamente a capacidade de vetores estáticos.
-
O que caracteriza um Memory Leak (vazamento de memória)?
- ( ) Uma falha física nos pentes de memória RAM.
- (x) Memória alocada dinamicamente na heap que perdeu todas as referências de ponteiro sem ter sido liberada via free().
- ( ) Acesso a uma posição de índice negativo em um vetor.
-
( ) Inclusão de bibliotecas com a diretiva #include.
-
Em relação à notação Big-O, o que representa \(O(1)\)?
- (x) Complexidade de tempo constante, independente da quantidade de elementos de entrada.
- ( ) Complexidade linear onde o tempo é diretamente proporcional a N.
- ( ) Complexidade exponencial com alto custo de processamento.
-
( ) Falha no algoritmo por falta de convergência.
-
Qual é a vantagem primária de uma Lista Encadeada sobre um Vetor Estático?
- ( ) Acesso aleatório por índice em tempo O(1).
- (x) Alocação dinâmica sob demanda e inserção/remoção em O(1) sem necessidade de realocação contígua.
- ( ) Menor consumo total de memória devido à ausência de ponteiros.
-
( ) Garantia de que todos os nós estão contíguos no cache de hardware.
-
Qual o princípio de funcionamento fundamental de uma Pilha (Stack)?
- ( ) FIFO (First-In, First-Out).
- (x) LIFO (Last-In, First-Out).
- ( ) Acesso aleatório por chave hash.
-
( ) Ordenação automática por valor decrescente.
-
Qual o princípio de funcionamento fundamental de uma Fila (Queue)?
- (x) FIFO (First-In, First-Out).
- ( ) LIFO (Last-In, First-Out).
- ( ) Inversão sequencial permanente.
-
( ) Acesso hierárquico por árvore de decisão.
-
O que caracteriza uma Árvore de Busca Binária (BST) válida?
- ( ) Todos os nós possuem obrigatoriamente 3 filhos.
- (x) Para cada nó, todos os valores da subárvore esquerda são menores e os da subárvore direita são maiores.
- ( ) A altura de todas as folhas é sempre idêntica e constante.
-
( ) Não permite operações de busca por chave.
-
Em uma Tabela Hash, o que é uma colisão?
- ( ) Um erro fatal que interrompe a execução do sistema operacional.
- (x) O evento no qual duas chaves distintas geram o mesmo índice após a aplicação da função hash.
- ( ) A tentativa de armazenar um número de ponto flutuante em uma variável inteira.
-
( ) O esgotamento do espaço de endereçamento de 64 bits.
-
Qual a complexidade assintótica média de busca em uma Tabela Hash bem projetada?
- ( ) \(O(n^2)\)
- ( ) \(O(n \log n)\)
- (x) \(O(1)\)
- ( ) \(O(n!)\)
🧠 Quiz 09 – Filas (Queues): Princípio FIFO, Fila Circular e Deque
- Qual é o conceito fundamental abordado em Filas (Queues): Princípio FIFO, Fila Circular e Deque?
- ( ) Permitir vazamento descontrolado de ponteiros na memória física.
- (x) Organizar, armazenar e manipular dados de forma determinística e com eficiência assintótica.
- ( ) Desabilitar a checagem de limites em arrays estáticos.
-
( ) Forçar o uso exclusivo de variáveis globais para comunicação entre funções.
-
Qual a principal função da função
free()em linguagem C? - (x) Devolver ao sistema operacional a memória previamente alocada na heap via malloc/calloc.
- ( ) Apagar o código-fonte gravado em disco.
- ( ) Aumentar a velocidade do clock do processador.
-
( ) Duplicar automaticamente a capacidade de vetores estáticos.
-
O que caracteriza um Memory Leak (vazamento de memória)?
- ( ) Uma falha física nos pentes de memória RAM.
- (x) Memória alocada dinamicamente na heap que perdeu todas as referências de ponteiro sem ter sido liberada via free().
- ( ) Acesso a uma posição de índice negativo em um vetor.
-
( ) Inclusão de bibliotecas com a diretiva #include.
-
Em relação à notação Big-O, o que representa \(O(1)\)?
- (x) Complexidade de tempo constante, independente da quantidade de elementos de entrada.
- ( ) Complexidade linear onde o tempo é diretamente proporcional a N.
- ( ) Complexidade exponencial com alto custo de processamento.
-
( ) Falha no algoritmo por falta de convergência.
-
Qual é a vantagem primária de uma Lista Encadeada sobre um Vetor Estático?
- ( ) Acesso aleatório por índice em tempo O(1).
- (x) Alocação dinâmica sob demanda e inserção/remoção em O(1) sem necessidade de realocação contígua.
- ( ) Menor consumo total de memória devido à ausência de ponteiros.
-
( ) Garantia de que todos os nós estão contíguos no cache de hardware.
-
Qual o princípio de funcionamento fundamental de uma Pilha (Stack)?
- ( ) FIFO (First-In, First-Out).
- (x) LIFO (Last-In, First-Out).
- ( ) Acesso aleatório por chave hash.
-
( ) Ordenação automática por valor decrescente.
-
Qual o princípio de funcionamento fundamental de uma Fila (Queue)?
- (x) FIFO (First-In, First-Out).
- ( ) LIFO (Last-In, First-Out).
- ( ) Inversão sequencial permanente.
-
( ) Acesso hierárquico por árvore de decisão.
-
O que caracteriza uma Árvore de Busca Binária (BST) válida?
- ( ) Todos os nós possuem obrigatoriamente 3 filhos.
- (x) Para cada nó, todos os valores da subárvore esquerda são menores e os da subárvore direita são maiores.
- ( ) A altura de todas as folhas é sempre idêntica e constante.
-
( ) Não permite operações de busca por chave.
-
Em uma Tabela Hash, o que é uma colisão?
- ( ) Um erro fatal que interrompe a execução do sistema operacional.
- (x) O evento no qual duas chaves distintas geram o mesmo índice após a aplicação da função hash.
- ( ) A tentativa de armazenar um número de ponto flutuante em uma variável inteira.
-
( ) O esgotamento do espaço de endereçamento de 64 bits.
-
Qual a complexidade assintótica média de busca em uma Tabela Hash bem projetada?
- ( ) \(O(n^2)\)
- ( ) \(O(n \log n)\)
- (x) \(O(1)\)
- ( ) \(O(n!)\)
🧠 Quiz 10 – Recursão Aplicada, Pilha de Execução e Divisão e Conquista
- Qual é o conceito fundamental abordado em Recursão Aplicada, Pilha de Execução e Divisão e Conquista?
- ( ) Permitir vazamento descontrolado de ponteiros na memória física.
- (x) Organizar, armazenar e manipular dados de forma determinística e com eficiência assintótica.
- ( ) Desabilitar a checagem de limites em arrays estáticos.
-
( ) Forçar o uso exclusivo de variáveis globais para comunicação entre funções.
-
Qual a principal função da função
free()em linguagem C? - (x) Devolver ao sistema operacional a memória previamente alocada na heap via malloc/calloc.
- ( ) Apagar o código-fonte gravado em disco.
- ( ) Aumentar a velocidade do clock do processador.
-
( ) Duplicar automaticamente a capacidade de vetores estáticos.
-
O que caracteriza um Memory Leak (vazamento de memória)?
- ( ) Uma falha física nos pentes de memória RAM.
- (x) Memória alocada dinamicamente na heap que perdeu todas as referências de ponteiro sem ter sido liberada via free().
- ( ) Acesso a uma posição de índice negativo em um vetor.
-
( ) Inclusão de bibliotecas com a diretiva #include.
-
Em relação à notação Big-O, o que representa \(O(1)\)?
- (x) Complexidade de tempo constante, independente da quantidade de elementos de entrada.
- ( ) Complexidade linear onde o tempo é diretamente proporcional a N.
- ( ) Complexidade exponencial com alto custo de processamento.
-
( ) Falha no algoritmo por falta de convergência.
-
Qual é a vantagem primária de uma Lista Encadeada sobre um Vetor Estático?
- ( ) Acesso aleatório por índice em tempo O(1).
- (x) Alocação dinâmica sob demanda e inserção/remoção em O(1) sem necessidade de realocação contígua.
- ( ) Menor consumo total de memória devido à ausência de ponteiros.
-
( ) Garantia de que todos os nós estão contíguos no cache de hardware.
-
Qual o princípio de funcionamento fundamental de uma Pilha (Stack)?
- ( ) FIFO (First-In, First-Out).
- (x) LIFO (Last-In, First-Out).
- ( ) Acesso aleatório por chave hash.
-
( ) Ordenação automática por valor decrescente.
-
Qual o princípio de funcionamento fundamental de uma Fila (Queue)?
- (x) FIFO (First-In, First-Out).
- ( ) LIFO (Last-In, First-Out).
- ( ) Inversão sequencial permanente.
-
( ) Acesso hierárquico por árvore de decisão.
-
O que caracteriza uma Árvore de Busca Binária (BST) válida?
- ( ) Todos os nós possuem obrigatoriamente 3 filhos.
- (x) Para cada nó, todos os valores da subárvore esquerda são menores e os da subárvore direita são maiores.
- ( ) A altura de todas as folhas é sempre idêntica e constante.
-
( ) Não permite operações de busca por chave.
-
Em uma Tabela Hash, o que é uma colisão?
- ( ) Um erro fatal que interrompe a execução do sistema operacional.
- (x) O evento no qual duas chaves distintas geram o mesmo índice após a aplicação da função hash.
- ( ) A tentativa de armazenar um número de ponto flutuante em uma variável inteira.
-
( ) O esgotamento do espaço de endereçamento de 64 bits.
-
Qual a complexidade assintótica média de busca em uma Tabela Hash bem projetada?
- ( ) \(O(n^2)\)
- ( ) \(O(n \log n)\)
- (x) \(O(1)\)
- ( ) \(O(n!)\)
🧠 Quiz 11 – Algoritmos de Ordenação Elementares: Bubble, Selection e Insertion Sort
- Qual é o conceito fundamental abordado em Algoritmos de Ordenação Elementares: Bubble, Selection e Insertion Sort?
- ( ) Permitir vazamento descontrolado de ponteiros na memória física.
- (x) Organizar, armazenar e manipular dados de forma determinística e com eficiência assintótica.
- ( ) Desabilitar a checagem de limites em arrays estáticos.
-
( ) Forçar o uso exclusivo de variáveis globais para comunicação entre funções.
-
Qual a principal função da função
free()em linguagem C? - (x) Devolver ao sistema operacional a memória previamente alocada na heap via malloc/calloc.
- ( ) Apagar o código-fonte gravado em disco.
- ( ) Aumentar a velocidade do clock do processador.
-
( ) Duplicar automaticamente a capacidade de vetores estáticos.
-
O que caracteriza um Memory Leak (vazamento de memória)?
- ( ) Uma falha física nos pentes de memória RAM.
- (x) Memória alocada dinamicamente na heap que perdeu todas as referências de ponteiro sem ter sido liberada via free().
- ( ) Acesso a uma posição de índice negativo em um vetor.
-
( ) Inclusão de bibliotecas com a diretiva #include.
-
Em relação à notação Big-O, o que representa \(O(1)\)?
- (x) Complexidade de tempo constante, independente da quantidade de elementos de entrada.
- ( ) Complexidade linear onde o tempo é diretamente proporcional a N.
- ( ) Complexidade exponencial com alto custo de processamento.
-
( ) Falha no algoritmo por falta de convergência.
-
Qual é a vantagem primária de uma Lista Encadeada sobre um Vetor Estático?
- ( ) Acesso aleatório por índice em tempo O(1).
- (x) Alocação dinâmica sob demanda e inserção/remoção em O(1) sem necessidade de realocação contígua.
- ( ) Menor consumo total de memória devido à ausência de ponteiros.
-
( ) Garantia de que todos os nós estão contíguos no cache de hardware.
-
Qual o princípio de funcionamento fundamental de uma Pilha (Stack)?
- ( ) FIFO (First-In, First-Out).
- (x) LIFO (Last-In, First-Out).
- ( ) Acesso aleatório por chave hash.
-
( ) Ordenação automática por valor decrescente.
-
Qual o princípio de funcionamento fundamental de uma Fila (Queue)?
- (x) FIFO (First-In, First-Out).
- ( ) LIFO (Last-In, First-Out).
- ( ) Inversão sequencial permanente.
-
( ) Acesso hierárquico por árvore de decisão.
-
O que caracteriza uma Árvore de Busca Binária (BST) válida?
- ( ) Todos os nós possuem obrigatoriamente 3 filhos.
- (x) Para cada nó, todos os valores da subárvore esquerda são menores e os da subárvore direita são maiores.
- ( ) A altura de todas as folhas é sempre idêntica e constante.
-
( ) Não permite operações de busca por chave.
-
Em uma Tabela Hash, o que é uma colisão?
- ( ) Um erro fatal que interrompe a execução do sistema operacional.
- (x) O evento no qual duas chaves distintas geram o mesmo índice após a aplicação da função hash.
- ( ) A tentativa de armazenar um número de ponto flutuante em uma variável inteira.
-
( ) O esgotamento do espaço de endereçamento de 64 bits.
-
Qual a complexidade assintótica média de busca em uma Tabela Hash bem projetada?
- ( ) \(O(n^2)\)
- ( ) \(O(n \log n)\)
- (x) \(O(1)\)
- ( ) \(O(n!)\)
🧠 Quiz 12 – Algoritmos de Ordenação Eficientes: MergeSort e QuickSort
- Qual é o conceito fundamental abordado em Algoritmos de Ordenação Eficientes: MergeSort e QuickSort?
- ( ) Permitir vazamento descontrolado de ponteiros na memória física.
- (x) Organizar, armazenar e manipular dados de forma determinística e com eficiência assintótica.
- ( ) Desabilitar a checagem de limites em arrays estáticos.
-
( ) Forçar o uso exclusivo de variáveis globais para comunicação entre funções.
-
Qual a principal função da função
free()em linguagem C? - (x) Devolver ao sistema operacional a memória previamente alocada na heap via malloc/calloc.
- ( ) Apagar o código-fonte gravado em disco.
- ( ) Aumentar a velocidade do clock do processador.
-
( ) Duplicar automaticamente a capacidade de vetores estáticos.
-
O que caracteriza um Memory Leak (vazamento de memória)?
- ( ) Uma falha física nos pentes de memória RAM.
- (x) Memória alocada dinamicamente na heap que perdeu todas as referências de ponteiro sem ter sido liberada via free().
- ( ) Acesso a uma posição de índice negativo em um vetor.
-
( ) Inclusão de bibliotecas com a diretiva #include.
-
Em relação à notação Big-O, o que representa \(O(1)\)?
- (x) Complexidade de tempo constante, independente da quantidade de elementos de entrada.
- ( ) Complexidade linear onde o tempo é diretamente proporcional a N.
- ( ) Complexidade exponencial com alto custo de processamento.
-
( ) Falha no algoritmo por falta de convergência.
-
Qual é a vantagem primária de uma Lista Encadeada sobre um Vetor Estático?
- ( ) Acesso aleatório por índice em tempo O(1).
- (x) Alocação dinâmica sob demanda e inserção/remoção em O(1) sem necessidade de realocação contígua.
- ( ) Menor consumo total de memória devido à ausência de ponteiros.
-
( ) Garantia de que todos os nós estão contíguos no cache de hardware.
-
Qual o princípio de funcionamento fundamental de uma Pilha (Stack)?
- ( ) FIFO (First-In, First-Out).
- (x) LIFO (Last-In, First-Out).
- ( ) Acesso aleatório por chave hash.
-
( ) Ordenação automática por valor decrescente.
-
Qual o princípio de funcionamento fundamental de uma Fila (Queue)?
- (x) FIFO (First-In, First-Out).
- ( ) LIFO (Last-In, First-Out).
- ( ) Inversão sequencial permanente.
-
( ) Acesso hierárquico por árvore de decisão.
-
O que caracteriza uma Árvore de Busca Binária (BST) válida?
- ( ) Todos os nós possuem obrigatoriamente 3 filhos.
- (x) Para cada nó, todos os valores da subárvore esquerda são menores e os da subárvore direita são maiores.
- ( ) A altura de todas as folhas é sempre idêntica e constante.
-
( ) Não permite operações de busca por chave.
-
Em uma Tabela Hash, o que é uma colisão?
- ( ) Um erro fatal que interrompe a execução do sistema operacional.
- (x) O evento no qual duas chaves distintas geram o mesmo índice após a aplicação da função hash.
- ( ) A tentativa de armazenar um número de ponto flutuante em uma variável inteira.
-
( ) O esgotamento do espaço de endereçamento de 64 bits.
-
Qual a complexidade assintótica média de busca em uma Tabela Hash bem projetada?
- ( ) \(O(n^2)\)
- ( ) \(O(n \log n)\)
- (x) \(O(1)\)
- ( ) \(O(n!)\)
🧠 Quiz 13 – Árvores Binárias e Árvores de Busca Binária (BST)
- Qual é o conceito fundamental abordado em Árvores Binárias e Árvores de Busca Binária (BST)?
- ( ) Permitir vazamento descontrolado de ponteiros na memória física.
- (x) Organizar, armazenar e manipular dados de forma determinística e com eficiência assintótica.
- ( ) Desabilitar a checagem de limites em arrays estáticos.
-
( ) Forçar o uso exclusivo de variáveis globais para comunicação entre funções.
-
Qual a principal função da função
free()em linguagem C? - (x) Devolver ao sistema operacional a memória previamente alocada na heap via malloc/calloc.
- ( ) Apagar o código-fonte gravado em disco.
- ( ) Aumentar a velocidade do clock do processador.
-
( ) Duplicar automaticamente a capacidade de vetores estáticos.
-
O que caracteriza um Memory Leak (vazamento de memória)?
- ( ) Uma falha física nos pentes de memória RAM.
- (x) Memória alocada dinamicamente na heap que perdeu todas as referências de ponteiro sem ter sido liberada via free().
- ( ) Acesso a uma posição de índice negativo em um vetor.
-
( ) Inclusão de bibliotecas com a diretiva #include.
-
Em relação à notação Big-O, o que representa \(O(1)\)?
- (x) Complexidade de tempo constante, independente da quantidade de elementos de entrada.
- ( ) Complexidade linear onde o tempo é diretamente proporcional a N.
- ( ) Complexidade exponencial com alto custo de processamento.
-
( ) Falha no algoritmo por falta de convergência.
-
Qual é a vantagem primária de uma Lista Encadeada sobre um Vetor Estático?
- ( ) Acesso aleatório por índice em tempo O(1).
- (x) Alocação dinâmica sob demanda e inserção/remoção em O(1) sem necessidade de realocação contígua.
- ( ) Menor consumo total de memória devido à ausência de ponteiros.
-
( ) Garantia de que todos os nós estão contíguos no cache de hardware.
-
Qual o princípio de funcionamento fundamental de uma Pilha (Stack)?
- ( ) FIFO (First-In, First-Out).
- (x) LIFO (Last-In, First-Out).
- ( ) Acesso aleatório por chave hash.
-
( ) Ordenação automática por valor decrescente.
-
Qual o princípio de funcionamento fundamental de uma Fila (Queue)?
- (x) FIFO (First-In, First-Out).
- ( ) LIFO (Last-In, First-Out).
- ( ) Inversão sequencial permanente.
-
( ) Acesso hierárquico por árvore de decisão.
-
O que caracteriza uma Árvore de Busca Binária (BST) válida?
- ( ) Todos os nós possuem obrigatoriamente 3 filhos.
- (x) Para cada nó, todos os valores da subárvore esquerda são menores e os da subárvore direita são maiores.
- ( ) A altura de todas as folhas é sempre idêntica e constante.
-
( ) Não permite operações de busca por chave.
-
Em uma Tabela Hash, o que é uma colisão?
- ( ) Um erro fatal que interrompe a execução do sistema operacional.
- (x) O evento no qual duas chaves distintas geram o mesmo índice após a aplicação da função hash.
- ( ) A tentativa de armazenar um número de ponto flutuante em uma variável inteira.
-
( ) O esgotamento do espaço de endereçamento de 64 bits.
-
Qual a complexidade assintótica média de busca em uma Tabela Hash bem projetada?
- ( ) \(O(n^2)\)
- ( ) \(O(n \log n)\)
- (x) \(O(1)\)
- ( ) \(O(n!)\)
🧠 Quiz 14 – Tabelas Hash: Funções de Espalhamento e Resolução de Colisões
- Qual é o conceito fundamental abordado em Tabelas Hash: Funções de Espalhamento e Resolução de Colisões?
- ( ) Permitir vazamento descontrolado de ponteiros na memória física.
- (x) Organizar, armazenar e manipular dados de forma determinística e com eficiência assintótica.
- ( ) Desabilitar a checagem de limites em arrays estáticos.
-
( ) Forçar o uso exclusivo de variáveis globais para comunicação entre funções.
-
Qual a principal função da função
free()em linguagem C? - (x) Devolver ao sistema operacional a memória previamente alocada na heap via malloc/calloc.
- ( ) Apagar o código-fonte gravado em disco.
- ( ) Aumentar a velocidade do clock do processador.
-
( ) Duplicar automaticamente a capacidade de vetores estáticos.
-
O que caracteriza um Memory Leak (vazamento de memória)?
- ( ) Uma falha física nos pentes de memória RAM.
- (x) Memória alocada dinamicamente na heap que perdeu todas as referências de ponteiro sem ter sido liberada via free().
- ( ) Acesso a uma posição de índice negativo em um vetor.
-
( ) Inclusão de bibliotecas com a diretiva #include.
-
Em relação à notação Big-O, o que representa \(O(1)\)?
- (x) Complexidade de tempo constante, independente da quantidade de elementos de entrada.
- ( ) Complexidade linear onde o tempo é diretamente proporcional a N.
- ( ) Complexidade exponencial com alto custo de processamento.
-
( ) Falha no algoritmo por falta de convergência.
-
Qual é a vantagem primária de uma Lista Encadeada sobre um Vetor Estático?
- ( ) Acesso aleatório por índice em tempo O(1).
- (x) Alocação dinâmica sob demanda e inserção/remoção em O(1) sem necessidade de realocação contígua.
- ( ) Menor consumo total de memória devido à ausência de ponteiros.
-
( ) Garantia de que todos os nós estão contíguos no cache de hardware.
-
Qual o princípio de funcionamento fundamental de uma Pilha (Stack)?
- ( ) FIFO (First-In, First-Out).
- (x) LIFO (Last-In, First-Out).
- ( ) Acesso aleatório por chave hash.
-
( ) Ordenação automática por valor decrescente.
-
Qual o princípio de funcionamento fundamental de uma Fila (Queue)?
- (x) FIFO (First-In, First-Out).
- ( ) LIFO (Last-In, First-Out).
- ( ) Inversão sequencial permanente.
-
( ) Acesso hierárquico por árvore de decisão.
-
O que caracteriza uma Árvore de Busca Binária (BST) válida?
- ( ) Todos os nós possuem obrigatoriamente 3 filhos.
- (x) Para cada nó, todos os valores da subárvore esquerda são menores e os da subárvore direita são maiores.
- ( ) A altura de todas as folhas é sempre idêntica e constante.
-
( ) Não permite operações de busca por chave.
-
Em uma Tabela Hash, o que é uma colisão?
- ( ) Um erro fatal que interrompe a execução do sistema operacional.
- (x) O evento no qual duas chaves distintas geram o mesmo índice após a aplicação da função hash.
- ( ) A tentativa de armazenar um número de ponto flutuante em uma variável inteira.
-
( ) O esgotamento do espaço de endereçamento de 64 bits.
-
Qual a complexidade assintótica média de busca em uma Tabela Hash bem projetada?
- ( ) \(O(n^2)\)
- ( ) \(O(n \log n)\)
- (x) \(O(1)\)
- ( ) \(O(n!)\)
🧠 Quiz 15 – Heaps Binários e Filas de Prioridade (Priority Queues)
- Qual é o conceito fundamental abordado em Heaps Binários e Filas de Prioridade (Priority Queues)?
- ( ) Permitir vazamento descontrolado de ponteiros na memória física.
- (x) Organizar, armazenar e manipular dados de forma determinística e com eficiência assintótica.
- ( ) Desabilitar a checagem de limites em arrays estáticos.
-
( ) Forçar o uso exclusivo de variáveis globais para comunicação entre funções.
-
Qual a principal função da função
free()em linguagem C? - (x) Devolver ao sistema operacional a memória previamente alocada na heap via malloc/calloc.
- ( ) Apagar o código-fonte gravado em disco.
- ( ) Aumentar a velocidade do clock do processador.
-
( ) Duplicar automaticamente a capacidade de vetores estáticos.
-
O que caracteriza um Memory Leak (vazamento de memória)?
- ( ) Uma falha física nos pentes de memória RAM.
- (x) Memória alocada dinamicamente na heap que perdeu todas as referências de ponteiro sem ter sido liberada via free().
- ( ) Acesso a uma posição de índice negativo em um vetor.
-
( ) Inclusão de bibliotecas com a diretiva #include.
-
Em relação à notação Big-O, o que representa \(O(1)\)?
- (x) Complexidade de tempo constante, independente da quantidade de elementos de entrada.
- ( ) Complexidade linear onde o tempo é diretamente proporcional a N.
- ( ) Complexidade exponencial com alto custo de processamento.
-
( ) Falha no algoritmo por falta de convergência.
-
Qual é a vantagem primária de uma Lista Encadeada sobre um Vetor Estático?
- ( ) Acesso aleatório por índice em tempo O(1).
- (x) Alocação dinâmica sob demanda e inserção/remoção em O(1) sem necessidade de realocação contígua.
- ( ) Menor consumo total de memória devido à ausência de ponteiros.
-
( ) Garantia de que todos os nós estão contíguos no cache de hardware.
-
Qual o princípio de funcionamento fundamental de uma Pilha (Stack)?
- ( ) FIFO (First-In, First-Out).
- (x) LIFO (Last-In, First-Out).
- ( ) Acesso aleatório por chave hash.
-
( ) Ordenação automática por valor decrescente.
-
Qual o princípio de funcionamento fundamental de uma Fila (Queue)?
- (x) FIFO (First-In, First-Out).
- ( ) LIFO (Last-In, First-Out).
- ( ) Inversão sequencial permanente.
-
( ) Acesso hierárquico por árvore de decisão.
-
O que caracteriza uma Árvore de Busca Binária (BST) válida?
- ( ) Todos os nós possuem obrigatoriamente 3 filhos.
- (x) Para cada nó, todos os valores da subárvore esquerda são menores e os da subárvore direita são maiores.
- ( ) A altura de todas as folhas é sempre idêntica e constante.
-
( ) Não permite operações de busca por chave.
-
Em uma Tabela Hash, o que é uma colisão?
- ( ) Um erro fatal que interrompe a execução do sistema operacional.
- (x) O evento no qual duas chaves distintas geram o mesmo índice após a aplicação da função hash.
- ( ) A tentativa de armazenar um número de ponto flutuante em uma variável inteira.
-
( ) O esgotamento do espaço de endereçamento de 64 bits.
-
Qual a complexidade assintótica média de busca em uma Tabela Hash bem projetada?
- ( ) \(O(n^2)\)
- ( ) \(O(n \log n)\)
- (x) \(O(1)\)
- ( ) \(O(n!)\)
🧠 Quiz 16 – Introdução aos Grafos: Representação e Algoritmos de Busca
- Qual é o conceito fundamental abordado em Introdução aos Grafos: Representação e Algoritmos de Busca?
- ( ) Permitir vazamento descontrolado de ponteiros na memória física.
- (x) Organizar, armazenar e manipular dados de forma determinística e com eficiência assintótica.
- ( ) Desabilitar a checagem de limites em arrays estáticos.
-
( ) Forçar o uso exclusivo de variáveis globais para comunicação entre funções.
-
Qual a principal função da função
free()em linguagem C? - (x) Devolver ao sistema operacional a memória previamente alocada na heap via malloc/calloc.
- ( ) Apagar o código-fonte gravado em disco.
- ( ) Aumentar a velocidade do clock do processador.
-
( ) Duplicar automaticamente a capacidade de vetores estáticos.
-
O que caracteriza um Memory Leak (vazamento de memória)?
- ( ) Uma falha física nos pentes de memória RAM.
- (x) Memória alocada dinamicamente na heap que perdeu todas as referências de ponteiro sem ter sido liberada via free().
- ( ) Acesso a uma posição de índice negativo em um vetor.
-
( ) Inclusão de bibliotecas com a diretiva #include.
-
Em relação à notação Big-O, o que representa \(O(1)\)?
- (x) Complexidade de tempo constante, independente da quantidade de elementos de entrada.
- ( ) Complexidade linear onde o tempo é diretamente proporcional a N.
- ( ) Complexidade exponencial com alto custo de processamento.
-
( ) Falha no algoritmo por falta de convergência.
-
Qual é a vantagem primária de uma Lista Encadeada sobre um Vetor Estático?
- ( ) Acesso aleatório por índice em tempo O(1).
- (x) Alocação dinâmica sob demanda e inserção/remoção em O(1) sem necessidade de realocação contígua.
- ( ) Menor consumo total de memória devido à ausência de ponteiros.
-
( ) Garantia de que todos os nós estão contíguos no cache de hardware.
-
Qual o princípio de funcionamento fundamental de uma Pilha (Stack)?
- ( ) FIFO (First-In, First-Out).
- (x) LIFO (Last-In, First-Out).
- ( ) Acesso aleatório por chave hash.
-
( ) Ordenação automática por valor decrescente.
-
Qual o princípio de funcionamento fundamental de uma Fila (Queue)?
- (x) FIFO (First-In, First-Out).
- ( ) LIFO (Last-In, First-Out).
- ( ) Inversão sequencial permanente.
-
( ) Acesso hierárquico por árvore de decisão.
-
O que caracteriza uma Árvore de Busca Binária (BST) válida?
- ( ) Todos os nós possuem obrigatoriamente 3 filhos.
- (x) Para cada nó, todos os valores da subárvore esquerda são menores e os da subárvore direita são maiores.
- ( ) A altura de todas as folhas é sempre idêntica e constante.
-
( ) Não permite operações de busca por chave.
-
Em uma Tabela Hash, o que é uma colisão?
- ( ) Um erro fatal que interrompe a execução do sistema operacional.
- (x) O evento no qual duas chaves distintas geram o mesmo índice após a aplicação da função hash.
- ( ) A tentativa de armazenar um número de ponto flutuante em uma variável inteira.
-
( ) O esgotamento do espaço de endereçamento de 64 bits.
-
Qual a complexidade assintótica média de busca em uma Tabela Hash bem projetada?
- ( ) \(O(n^2)\)
- ( ) \(O(n \log n)\)
- (x) \(O(1)\)
- ( ) \(O(n!)\)
🧠 Quiz 17 – Árvores Balanceadas: Árvore AVL e Rotações
- Qual é o conceito fundamental abordado em Árvores Balanceadas: Árvore AVL e Rotações?
- ( ) Permitir vazamento descontrolado de ponteiros na memória física.
- (x) Organizar, armazenar e manipular dados de forma determinística e com eficiência assintótica.
- ( ) Desabilitar a checagem de limites em arrays estáticos.
-
( ) Forçar o uso exclusivo de variáveis globais para comunicação entre funções.
-
Qual a principal função da função
free()em linguagem C? - (x) Devolver ao sistema operacional a memória previamente alocada na heap via malloc/calloc.
- ( ) Apagar o código-fonte gravado em disco.
- ( ) Aumentar a velocidade do clock do processador.
-
( ) Duplicar automaticamente a capacidade de vetores estáticos.
-
O que caracteriza um Memory Leak (vazamento de memória)?
- ( ) Uma falha física nos pentes de memória RAM.
- (x) Memória alocada dinamicamente na heap que perdeu todas as referências de ponteiro sem ter sido liberada via free().
- ( ) Acesso a uma posição de índice negativo em um vetor.
-
( ) Inclusão de bibliotecas com a diretiva #include.
-
Em relação à notação Big-O, o que representa \(O(1)\)?
- (x) Complexidade de tempo constante, independente da quantidade de elementos de entrada.
- ( ) Complexidade linear onde o tempo é diretamente proporcional a N.
- ( ) Complexidade exponencial com alto custo de processamento.
-
( ) Falha no algoritmo por falta de convergência.
-
Qual é a vantagem primária de uma Lista Encadeada sobre um Vetor Estático?
- ( ) Acesso aleatório por índice em tempo O(1).
- (x) Alocação dinâmica sob demanda e inserção/remoção em O(1) sem necessidade de realocação contígua.
- ( ) Menor consumo total de memória devido à ausência de ponteiros.
-
( ) Garantia de que todos os nós estão contíguos no cache de hardware.
-
Qual o princípio de funcionamento fundamental de uma Pilha (Stack)?
- ( ) FIFO (First-In, First-Out).
- (x) LIFO (Last-In, First-Out).
- ( ) Acesso aleatório por chave hash.
-
( ) Ordenação automática por valor decrescente.
-
Qual o princípio de funcionamento fundamental de uma Fila (Queue)?
- (x) FIFO (First-In, First-Out).
- ( ) LIFO (Last-In, First-Out).
- ( ) Inversão sequencial permanente.
-
( ) Acesso hierárquico por árvore de decisão.
-
O que caracteriza uma Árvore de Busca Binária (BST) válida?
- ( ) Todos os nós possuem obrigatoriamente 3 filhos.
- (x) Para cada nó, todos os valores da subárvore esquerda são menores e os da subárvore direita são maiores.
- ( ) A altura de todas as folhas é sempre idêntica e constante.
-
( ) Não permite operações de busca por chave.
-
Em uma Tabela Hash, o que é uma colisão?
- ( ) Um erro fatal que interrompe a execução do sistema operacional.
- (x) O evento no qual duas chaves distintas geram o mesmo índice após a aplicação da função hash.
- ( ) A tentativa de armazenar um número de ponto flutuante em uma variável inteira.
-
( ) O esgotamento do espaço de endereçamento de 64 bits.
-
Qual a complexidade assintótica média de busca em uma Tabela Hash bem projetada?
- ( ) \(O(n^2)\)
- ( ) \(O(n \log n)\)
- (x) \(O(1)\)
- ( ) \(O(n!)\)
🧠 Quiz 18 – Estruturas Avançadas de Busca: Árvores Trie e Busca de Prefixos
- Qual é o conceito fundamental abordado em Estruturas Avançadas de Busca: Árvores Trie e Busca de Prefixos?
- ( ) Permitir vazamento descontrolado de ponteiros na memória física.
- (x) Organizar, armazenar e manipular dados de forma determinística e com eficiência assintótica.
- ( ) Desabilitar a checagem de limites em arrays estáticos.
-
( ) Forçar o uso exclusivo de variáveis globais para comunicação entre funções.
-
Qual a principal função da função
free()em linguagem C? - (x) Devolver ao sistema operacional a memória previamente alocada na heap via malloc/calloc.
- ( ) Apagar o código-fonte gravado em disco.
- ( ) Aumentar a velocidade do clock do processador.
-
( ) Duplicar automaticamente a capacidade de vetores estáticos.
-
O que caracteriza um Memory Leak (vazamento de memória)?
- ( ) Uma falha física nos pentes de memória RAM.
- (x) Memória alocada dinamicamente na heap que perdeu todas as referências de ponteiro sem ter sido liberada via free().
- ( ) Acesso a uma posição de índice negativo em um vetor.
-
( ) Inclusão de bibliotecas com a diretiva #include.
-
Em relação à notação Big-O, o que representa \(O(1)\)?
- (x) Complexidade de tempo constante, independente da quantidade de elementos de entrada.
- ( ) Complexidade linear onde o tempo é diretamente proporcional a N.
- ( ) Complexidade exponencial com alto custo de processamento.
-
( ) Falha no algoritmo por falta de convergência.
-
Qual é a vantagem primária de uma Lista Encadeada sobre um Vetor Estático?
- ( ) Acesso aleatório por índice em tempo O(1).
- (x) Alocação dinâmica sob demanda e inserção/remoção em O(1) sem necessidade de realocação contígua.
- ( ) Menor consumo total de memória devido à ausência de ponteiros.
-
( ) Garantia de que todos os nós estão contíguos no cache de hardware.
-
Qual o princípio de funcionamento fundamental de uma Pilha (Stack)?
- ( ) FIFO (First-In, First-Out).
- (x) LIFO (Last-In, First-Out).
- ( ) Acesso aleatório por chave hash.
-
( ) Ordenação automática por valor decrescente.
-
Qual o princípio de funcionamento fundamental de uma Fila (Queue)?
- (x) FIFO (First-In, First-Out).
- ( ) LIFO (Last-In, First-Out).
- ( ) Inversão sequencial permanente.
-
( ) Acesso hierárquico por árvore de decisão.
-
O que caracteriza uma Árvore de Busca Binária (BST) válida?
- ( ) Todos os nós possuem obrigatoriamente 3 filhos.
- (x) Para cada nó, todos os valores da subárvore esquerda são menores e os da subárvore direita são maiores.
- ( ) A altura de todas as folhas é sempre idêntica e constante.
-
( ) Não permite operações de busca por chave.
-
Em uma Tabela Hash, o que é uma colisão?
- ( ) Um erro fatal que interrompe a execução do sistema operacional.
- (x) O evento no qual duas chaves distintas geram o mesmo índice após a aplicação da função hash.
- ( ) A tentativa de armazenar um número de ponto flutuante em uma variável inteira.
-
( ) O esgotamento do espaço de endereçamento de 64 bits.
-
Qual a complexidade assintótica média de busca em uma Tabela Hash bem projetada?
- ( ) \(O(n^2)\)
- ( ) \(O(n \log n)\)
- (x) \(O(1)\)
- ( ) \(O(n!)\)
🧠 Quiz 19 – Algoritmos de Menor Caminho em Grafos: Dijkstra e Fila de Prioridade
- Qual é o conceito fundamental abordado em Algoritmos de Menor Caminho em Grafos: Dijkstra e Fila de Prioridade?
- ( ) Permitir vazamento descontrolado de ponteiros na memória física.
- (x) Organizar, armazenar e manipular dados de forma determinística e com eficiência assintótica.
- ( ) Desabilitar a checagem de limites em arrays estáticos.
-
( ) Forçar o uso exclusivo de variáveis globais para comunicação entre funções.
-
Qual a principal função da função
free()em linguagem C? - (x) Devolver ao sistema operacional a memória previamente alocada na heap via malloc/calloc.
- ( ) Apagar o código-fonte gravado em disco.
- ( ) Aumentar a velocidade do clock do processador.
-
( ) Duplicar automaticamente a capacidade de vetores estáticos.
-
O que caracteriza um Memory Leak (vazamento de memória)?
- ( ) Uma falha física nos pentes de memória RAM.
- (x) Memória alocada dinamicamente na heap que perdeu todas as referências de ponteiro sem ter sido liberada via free().
- ( ) Acesso a uma posição de índice negativo em um vetor.
-
( ) Inclusão de bibliotecas com a diretiva #include.
-
Em relação à notação Big-O, o que representa \(O(1)\)?
- (x) Complexidade de tempo constante, independente da quantidade de elementos de entrada.
- ( ) Complexidade linear onde o tempo é diretamente proporcional a N.
- ( ) Complexidade exponencial com alto custo de processamento.
-
( ) Falha no algoritmo por falta de convergência.
-
Qual é a vantagem primária de uma Lista Encadeada sobre um Vetor Estático?
- ( ) Acesso aleatório por índice em tempo O(1).
- (x) Alocação dinâmica sob demanda e inserção/remoção em O(1) sem necessidade de realocação contígua.
- ( ) Menor consumo total de memória devido à ausência de ponteiros.
-
( ) Garantia de que todos os nós estão contíguos no cache de hardware.
-
Qual o princípio de funcionamento fundamental de uma Pilha (Stack)?
- ( ) FIFO (First-In, First-Out).
- (x) LIFO (Last-In, First-Out).
- ( ) Acesso aleatório por chave hash.
-
( ) Ordenação automática por valor decrescente.
-
Qual o princípio de funcionamento fundamental de uma Fila (Queue)?
- (x) FIFO (First-In, First-Out).
- ( ) LIFO (Last-In, First-Out).
- ( ) Inversão sequencial permanente.
-
( ) Acesso hierárquico por árvore de decisão.
-
O que caracteriza uma Árvore de Busca Binária (BST) válida?
- ( ) Todos os nós possuem obrigatoriamente 3 filhos.
- (x) Para cada nó, todos os valores da subárvore esquerda são menores e os da subárvore direita são maiores.
- ( ) A altura de todas as folhas é sempre idêntica e constante.
-
( ) Não permite operações de busca por chave.
-
Em uma Tabela Hash, o que é uma colisão?
- ( ) Um erro fatal que interrompe a execução do sistema operacional.
- (x) O evento no qual duas chaves distintas geram o mesmo índice após a aplicação da função hash.
- ( ) A tentativa de armazenar um número de ponto flutuante em uma variável inteira.
-
( ) O esgotamento do espaço de endereçamento de 64 bits.
-
Qual a complexidade assintótica média de busca em uma Tabela Hash bem projetada?
- ( ) \(O(n^2)\)
- ( ) \(O(n \log n)\)
- (x) \(O(1)\)
- ( ) \(O(n!)\)
🧠 Quiz 20 – Projeto Capstone: Motor de Indexação e Busca Rápida em Memória
- Qual é o conceito fundamental abordado em Projeto Capstone: Motor de Indexação e Busca Rápida em Memória?
- ( ) Permitir vazamento descontrolado de ponteiros na memória física.
- (x) Organizar, armazenar e manipular dados de forma determinística e com eficiência assintótica.
- ( ) Desabilitar a checagem de limites em arrays estáticos.
-
( ) Forçar o uso exclusivo de variáveis globais para comunicação entre funções.
-
Qual a principal função da função
free()em linguagem C? - (x) Devolver ao sistema operacional a memória previamente alocada na heap via malloc/calloc.
- ( ) Apagar o código-fonte gravado em disco.
- ( ) Aumentar a velocidade do clock do processador.
-
( ) Duplicar automaticamente a capacidade de vetores estáticos.
-
O que caracteriza um Memory Leak (vazamento de memória)?
- ( ) Uma falha física nos pentes de memória RAM.
- (x) Memória alocada dinamicamente na heap que perdeu todas as referências de ponteiro sem ter sido liberada via free().
- ( ) Acesso a uma posição de índice negativo em um vetor.
-
( ) Inclusão de bibliotecas com a diretiva #include.
-
Em relação à notação Big-O, o que representa \(O(1)\)?
- (x) Complexidade de tempo constante, independente da quantidade de elementos de entrada.
- ( ) Complexidade linear onde o tempo é diretamente proporcional a N.
- ( ) Complexidade exponencial com alto custo de processamento.
-
( ) Falha no algoritmo por falta de convergência.
-
Qual é a vantagem primária de uma Lista Encadeada sobre um Vetor Estático?
- ( ) Acesso aleatório por índice em tempo O(1).
- (x) Alocação dinâmica sob demanda e inserção/remoção em O(1) sem necessidade de realocação contígua.
- ( ) Menor consumo total de memória devido à ausência de ponteiros.
-
( ) Garantia de que todos os nós estão contíguos no cache de hardware.
-
Qual o princípio de funcionamento fundamental de uma Pilha (Stack)?
- ( ) FIFO (First-In, First-Out).
- (x) LIFO (Last-In, First-Out).
- ( ) Acesso aleatório por chave hash.
-
( ) Ordenação automática por valor decrescente.
-
Qual o princípio de funcionamento fundamental de uma Fila (Queue)?
- (x) FIFO (First-In, First-Out).
- ( ) LIFO (Last-In, First-Out).
- ( ) Inversão sequencial permanente.
-
( ) Acesso hierárquico por árvore de decisão.
-
O que caracteriza uma Árvore de Busca Binária (BST) válida?
- ( ) Todos os nós possuem obrigatoriamente 3 filhos.
- (x) Para cada nó, todos os valores da subárvore esquerda são menores e os da subárvore direita são maiores.
- ( ) A altura de todas as folhas é sempre idêntica e constante.
-
( ) Não permite operações de busca por chave.
-
Em uma Tabela Hash, o que é uma colisão?
- ( ) Um erro fatal que interrompe a execução do sistema operacional.
- (x) O evento no qual duas chaves distintas geram o mesmo índice após a aplicação da função hash.
- ( ) A tentativa de armazenar um número de ponto flutuante em uma variável inteira.
-
( ) O esgotamento do espaço de endereçamento de 64 bits.
-
Qual a complexidade assintótica média de busca em uma Tabela Hash bem projetada?
- ( ) \(O(n^2)\)
- ( ) \(O(n \log n)\)
- (x) \(O(1)\)
- ( ) \(O(n!)\)
Slides
Configuração
Ambientes de Desenvolvimento e Compilação C/C++ 🛠️
Guias oficiais para configurar compiladores modernos, IDEs, depuradores de memória e ferramentas de profiling.
-
Compilador GCC / Clang --- Instalação de toolchain C99/C11 nativo no Windows e Linux.
-
VS Code para C/C++ --- Extensões, IntelliSense e compilação automatizada.
-
GDB & Valgrind (Memory Leak) --- Detecção e eliminação de vazamentos de memória e falhas de segmentação.
-
Profiling & Benchmark --- Medição de tempo de execução e validação de complexidade assintótica.
Setup 01: Compiladores GCC, Clang e Build Tools 🛠️
O desenvolvimento profissional de Estruturas de Dados em C requer um compilador moderno compatível com os padrões C99/C11.
1. No Windows (MinGW-w64 via MSYS2 ou WinLibs)
- Baixe o instalador do MSYS2 em msys2.org.
- Abra o terminal MSYS2 UCRT64 e instale o toolchain completo:
- Adicione
C:\msys64\ucrt64\binàs Variáveis de Ambiente do Sistema (PATH). - Verifique a instalação no PowerShell:
2. No Linux (Ubuntu / Debian / Fedora)
Setup 02: Ambiente VS Code com C/C++ Extension Pack 💻
Configuração do Visual Studio Code para edição inteligente, autocompletar e formatação de código C.
1. Extensões Recomendadas
Abra a aba de extensões (Ctrl + Shift + X) e instale:
- C/C++ (Microsoft): Suporte a IntelliSense, linting e navegação de símbolos.
- C/C++ Extension Pack: Inclui temas e CMake Tools.
- Code Runner ou Makefile Tools: Para compilação e execução rápida.
2. Compilação no Terminal Integrado
Para compilar um projeto com checagem rigorosa de avisos:
Setup 03: Depuração com GDB e Análise de Memória com Valgrind 🔍
Aprenda a detectar Segmentation Faults e Memory Leaks antes de colocar o software em produção.
1. Compilação com Símbolos de Debug (-g)
Para habilitar o rastreamento linha a linha:
2. Rastreando Vazamentos de Memória com Valgrind
No Linux ou WSL (Windows Subsystem for Linux):
- Critério de Aceite: O relatório final deve exibir0 errors from 0 contexts e All heap blocks were freed -- no leaks are possible.Setup 04: Profiling de Desempenho e Medição de Tempo ⚡
Como medir experimentalmente o tempo de execução de algoritmos para comprovar curvas Big-O.
1. Utilizando a Biblioteca <time.h> em C
#include <stdio.h>
#include <time.h>
void medir_tempo_execucao(void (*algoritmo)(void)) {
clock_t inicio = clock();
algoritmo();
clock_t fim = clock();
double tempo_gasto = (double)(fim - inicio) / CLOCKS_PER_SEC;
printf("Tempo de Execução: %f segundos\n", tempo_gasto);
}
2. Ferramenta GNU Gprof
Para mapear funções que mais consom ciclos de CPU:
Sobre
Sobre o Curso 🎓
O curso de Estruturas de Dados da TecPro foi desenvolvido para transformar a maneira como você pensa sobre programação.
🚀 Nossa Filosofia
Não queremos apenas que você saiba usar uma biblioteca; queremos que você entenda como ela funciona por baixo do capô. Domine a memória, os ponteiros e a arquitetura dos dados.
👥 Público-Alvo
- Estudantes de Ciência da Computação e ADS.
- Desenvolvedores que desejam aprofundar fundamentos.
- Entusiastas de algoritmos e maratonas de programação.
🏢 Sobre a Instituição
Focada em ensino técnico de alta qualidade, a TecPro prepara profissionais para os desafios reais do mercado de tecnologia.
Citação
"Os algoritmos são os motores, mas as estruturas de dados são o combustível do software moderno." — Time TecPro
Project Roadmap 🗺️
Acompanhe a evolução do projeto e os planos futuros.
✅ Concluído (Fase 1: Fundamentos)
- Estruturação do repositório.
- Definição da ementa de 16 aulas.
- Geração dos templates de aula, slides e quizzes.
- Configuração do visual moderno (Material, RevealJS).
🚧 Em Andamento (Fase 2: Refinamento)
- Revisão técnica de todas as aulas em C.
- Elaboração dos exercícios práticos avançados.
- Configuração do pipeline de CI/CD para deploy no GitHub Pages.
📅 Próximos Passos (Fase 3: Expansão)
- Adição de vídeos explicativos por aula.
- Implementação de um sistema de ranking nos quizzes.
- Expansão para estruturas de dados dinâmicas avançadas (Árvores AVL, Grafos Dirigidos).
Materiais Extras 📚
Para aprofundar seus conhecimentos em Estruturas de Dados e Algoritmos.
🛠️ Ferramentas Sugeridas
- Compilador C: GCC (MinGW no Windows, Clang no Mac/Linux).
- IDE/Editor: Visual Studio Code com extensões de C/C++.
- Visualização: VisuAlgo (Animações de algoritmos).
- Prática: LeetCode ou HackerRank.
📖 Leituras Recomendadas
- Algoritmos: Teoria e Prática (Cormen et al.) - A "Bíblia" dos algoritmos.
- Entendendo Algoritmos (Aditya Bhargava) - Ótimo para iniciantes, com ilustrações.
- Estruturas de Dados e Seus Algoritmos (Lucchesi et al.).
🎓 Cursos e Canais
- Harvard CS50: Introdução excelente à computação e memória.
- GeeksforGeeks: Referência técnica detalhada para implementações.
Dica
A melhor forma de aprender estrutura de dados é desenhando no papel antes de codificar! ✍️
🏷️ Índice de Tags Didáticas
Navegue pelas aulas, exercícios e projetos do curso organizados por temas, tecnologias e conceitos fundamentais:
tags.md:145-167/name
Versão para Impressão
Esta página foi gerada automaticamente para impressão.