Pular para conteúdo

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.c com 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

  1. Compilação limpa sem nenhum warning: gcc -Wall -Wextra -pedantic main.c.
  2. Execução sob o Valgrind comprovando zero vazamentos de memória (All heap blocks were freed -- no leaks are possible).
  3. Respeito rigoroso à complexidade assintótica estipulada na especificação teórica.