Prévia do material em texto
Análise Detalhada - Parte 2 - grafo.c Função: imprimir_grafo() Função: imprimir_grafo() -------------------------- Imprime todos os vértices e suas respectivas arestas. 1. if (!g) return; -> Verifica se o grafo é válido. 2. Vertice* v = g->lista_vertices; -> Começa pelo primeiro vértice. 3. while (v) { printf("%s -> ", v->id); Aresta* a = v->lista_adj; while (a) { printf("[%s: \"%s\"] -> ", a->destino, a->conteudo); a = a->prox; } printf("NULL\n"); v = v->prox; } -> Percorre todos os vértices e imprime seus vizinhos (arestas). Função: registrar_comunicacao() Função: registrar_comunicacao() -------------------------------- Registra uma comunicação entre dois vértices e grava em arquivos. 1. Verifica validade de ponteiros. 2. Busca ou cria os vértices de origem e destino. 3. Verifica se a aresta já existe entre os vértices. 4. Se não existir, adiciona a aresta com o conteúdo. 5. Gera timestamp usando time() e localtime(). 6. Formata linha com data/hora, origem, destino e conteúdo. 7. Decide o caminho do arquivo de destino com base na presença de '@': - Se não for email, grava em mensagens/.txt. - Se for email, grava tanto em mensagens/.txt quanto mensagens/.txt. 8. Usa fopen/fputs/fclose para persistir a linha. 9. Retorna 1 para sucesso, 0 em caso de erro. Função: carregar_mensagens_para_grafo() Função: carregar_mensagens_para_grafo() ---------------------------------------- Carrega comunicações gravadas em arquivos para o grafo. 1. Verifica ponteiros válidos. 2. Usa opendir para abrir o diretório de mensagens. 3. Percorre arquivos com readdir, verificando os com extensão .txt. 4. Para cada linha lida com fgets: - Usa sscanf para extrair data, origem, destino e mensagem. - Adiciona a aresta correspondente ao grafo usando adicionar_aresta(). 5. Fecha os arquivos e diretório. Função: liberar_aresta() Função: liberar_aresta() ------------------------- Libera a memória de uma lista de arestas. 1. while (a) { Aresta* prox = a->prox; free(a); a = prox; } -> Percorre e libera cada aresta individualmente. Função: liberar_vertice() Função: liberar_vertice() --------------------------- Libera a memória de um vértice e suas arestas. 1. if (!v) return; 2. liberar_aresta(v->lista_adj); 3. free(v); -> Garante liberação completa do vértice. Função: desalocar_grafo() Função: desalocar_grafo() -------------------------- Libera toda a memória alocada para o grafo. 1. if (!g) return; 2. Percorre todos os vértices: - Chama liberar_vertice() para cada um. 3. free(g); -> Remove grafo da memória, evitando vazamentos.