Spec Sistemas Com C • Trilha Progressiva em 4 Níveis


🧭 Navegação Pedagógica


🎯 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:

  1. Criar nó Node contendo valor e ponteiro next e 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)

  1. Salve o arquivo como: Atividade_19_1_SeuNome
  2. 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:

  1. 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)

  1. Salve o arquivo como: Atividade_19_2_SeuNome
  2. 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:

  1. Implementar fila com nós dinâmicos mantendo referências para head e tail.

Resultado Esperado

Fila enfileirando e desenfileirando em tempo constante O(1).

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_19_3_SeuNome
  2. 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:

  1. Implementar nó de BST com ponteiros esquerda e direita e busca recursiva.

Resultado Esperado

Árvore binária de busca construída com pesquisa em O(log N).

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_19_4_SeuNome
  2. 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