Logo Passei Direto
Buscar

analise_funcoes_grafo_parte2

Ferramentas de estudo

Material
páginas com resultados encontrados.
páginas com resultados encontrados.

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.

Mais conteúdos dessa disciplina