🧩 Exercícios: Estruturas de Dados Dinâmicas (Listas, Pilhas, Filas e BST)
Spec Sistemas Com C • Trilha Progressiva em 4 Níveis
🧭 Navegação Pedagógica
-
📖 Teoria do Capítulo 💻 Exemplos 📊 Slides 🧠 Quiz
🎯 Nível 1: Fundamentos
Problema 19.1 — Lista Encadeada Simples com Inserção no Início
Contexto: Lista Encadeada Simples com Inserção no Início no contexto de Estruturas de Dados Dinâmicas (Listas, Pilhas, Filas e BST).
Requisitos de Execução:
- Criar nó
Nodecontendo valor e ponteironexte implementar função de inserção no início O(1).
Resultado Esperado
Lista encadeada construída e percorrida dinamicamente.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_19_1_SeuNome - Envie na tarefa:
Atividade Cap 19 - Estruturas de Dados Dinâmicas (Listas, Pilhas, Filas e BST)
🔑 Gabarito de Código & Solução Comentada
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int valor;
struct Node *prox;
} Node;
Node* inserir_inicio(Node *cabeca, int v) {
Node *novo = (Node *)malloc(sizeof(Node));
novo->valor = v;
novo->prox = cabeca;
return novo;
}
int main(void) {
Node *lista = NULL;
lista = inserir_inicio(lista, 30);
lista = inserir_inicio(lista, 20);
lista = inserir_inicio(lista, 10);
printf("Primeiro no: %d\n", lista->valor);
return 0;
}
🔍 Nível 2: Prática
Problema 19.2 — Pilha Dinâmica (Stack LIFO) com push() e pop()
Contexto: Pilha Dinâmica (Stack LIFO) com push() e pop() no contexto de Estruturas de Dados Dinâmicas (Listas, Pilhas, Filas e BST).
Requisitos de Execução:
- Implementar operações de empilhamento e desempilhamento com verificação de pilha vazia.
Resultado Esperado
Pilha operando com disciplina LIFO e liberação de nós desempilhados.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_19_2_SeuNome - Envie na tarefa:
Atividade Cap 19 - Estruturas de Dados Dinâmicas (Listas, Pilhas, Filas e BST)
🔑 Gabarito de Código & Solução Comentada
#include <stdio.h>
#include <stdlib.h>
typedef struct StackNode { int dado; struct StackNode *prox; } StackNode;
void push(StackNode **topo, int v) {
StackNode *n = (StackNode *)malloc(sizeof(StackNode));
n->dado = v; n->prox = *topo;
*topo = n;
}
int pop(StackNode **topo) {
if (*topo == NULL) return -1;
StackNode *t = *topo;
int v = t->dado;
*topo = t->prox;
free(t);
return v;
}
int main(void) {
StackNode *s = NULL;
push(&s, 100); push(&s, 200);
printf("Pop: %d | Pop: %d\n", pop(&s), pop(&s));
return 0;
}
⚡ Nível 3: Integração
Problema 19.3 — Fila Dinâmica (Queue FIFO) com Ponteiros de Início e Fim
Contexto: Fila Dinâmica (Queue FIFO) com Ponteiros de Início e Fim no contexto de Estruturas de Dados Dinâmicas (Listas, Pilhas, Filas e BST).
Requisitos de Execução:
- Implementar fila com nós dinâmicos mantendo referências para
headetail.
Resultado Esperado
Fila enfileirando e desenfileirando em tempo constante O(1).
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_19_3_SeuNome - Envie na tarefa:
Atividade Cap 19 - Estruturas de Dados Dinâmicas (Listas, Pilhas, Filas e BST)
🔑 Gabarito de Código & Solução Comentada
#include <stdio.h>
#include <stdlib.h>
typedef struct FilaNode { int v; struct FilaNode *p; } FilaNode;
typedef struct { FilaNode *ini; FilaNode *fim; } Fila;
void enfileirar(Fila *f, int v) {
FilaNode *n = (FilaNode *)malloc(sizeof(FilaNode));
n->v = v; n->p = NULL;
if (f->fim) f->fim->p = n; else f->ini = n;
f->fim = n;
}
int main(void) {
Fila f = {NULL, NULL};
enfileirar(&f, 10);
printf("Fila inicializada com sucesso.\n");
return 0;
}
🏆 Nível 4: Desafio Corporativo
Problema 19.4 — Árvore Binária de Busca (BST) com Inserção e Busca O(log N)
Contexto: Árvore Binária de Busca (BST) com Inserção e Busca O(log N) no contexto de Estruturas de Dados Dinâmicas (Listas, Pilhas, Filas e BST).
Requisitos de Execução:
- Implementar nó de BST com ponteiros
esquerdaedireitae busca recursiva.
Resultado Esperado
Árvore binária de busca construída com pesquisa em O(log N).
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_19_4_SeuNome - Envie na tarefa:
Atividade Cap 19 - Estruturas de Dados Dinâmicas (Listas, Pilhas, Filas e BST)
🔑 Gabarito de Código & Solução Comentada
#include <stdio.h>
#include <stdlib.h>
typedef struct BstNode { int v; struct BstNode *esq, *dir; } BstNode;
BstNode* inserir_bst(BstNode *raiz, int v) {
if (!raiz) {
BstNode *n = (BstNode *)malloc(sizeof(BstNode));
n->v = v; n->esq = n->dir = NULL;
return n;
}
if (v < raiz->v) raiz->esq = inserir_bst(raiz->esq, v);
else raiz->dir = inserir_bst(raiz->dir, v);
return raiz;
}
int main(void) {
BstNode *raiz = NULL;
raiz = inserir_bst(raiz, 50);
raiz = inserir_bst(raiz, 30);
printf("Raiz BST: %d | Esq: %d\n", raiz->v, raiz->esq->v);
return 0;
}
| ⬅️ Voltar ao Índice de Exercícios | 📚 Sumário de Tópicos |