Pagina Interativa: Gerenciador de Pilha em C

Do básico ao avançado com explicações e consoles simulados

Home

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.

Teste Buscar