1. Estrutura da Pilha
struct Relatorio { int id; char titulo[50]; char data[20]; struct Relatorio *prox; };
Definição básica da estrutura Relatorio, essencial para organizar uma pilha em C.
Resultado
Pilha inicial vazia.
2. Push Básico
void push_relatorio(const char *titulo, const char *data) { struct Relatorio *novo_relatorio = malloc(sizeof(struct Relatorio)); strncpy(novo_relatorio->titulo, titulo, 49); strncpy(novo_relatorio->data, data, 19); novo_relatorio->id = proximo_id++; novo_relatorio->prox = topo; topo = novo_relatorio; }
Função simples para adicionar um novo relatório à pilha.
Teste Push
3. Pop Básico
void pop_relatorio() { if (!topo) return; struct Relatorio *temp = topo; topo = topo->prox; free(temp); }
Remove o último relatório inserido, liberando memória.
Teste Pop
4. Listar Relatórios
const char* listar_relatorios() { static char buffer[4096]; buffer[0] = '\0'; struct Relatorio *atual = topo; while (atual) { snprintf(linha, sizeof(linha), "ID: %d | Titulo: %s | Data: %s\n", atual->id, atual->titulo, atual->data); strncat(buffer, linha, sizeof(buffer) - strlen(buffer) - 1); atual = atual->prox; } return buffer; }
Gera uma listagem completa de todos os relatórios presentes na pilha.
Lista Atual
5. Peek — Verificar Topo
struct Relatorio* peek() { return topo; }
Função para visualizar o relatório no topo da pilha sem removê-lo.
Teste Peek
6. Contador de Relatórios
int contar() { int contador = 0; struct Relatorio* atual = topo; while (atual) { contador++; atual = atual->prox; } return contador; }
Função para contar quantos relatórios estão na pilha.
Teste Contador
7. Buscar por Título
struct Relatorio* buscar(const char* titulo) { struct Relatorio* atual = topo; while (atual) { if (strcmp(atual->titulo, titulo) == 0) { return atual; } atual = atual->prox; } return NULL; }
Busca um relatório pelo título, retornando o primeiro encontrado.