From 7cd4afbbc7284dabb1670ab9f856ab40b245b46b Mon Sep 17 00:00:00 2001 From: Vytor Calixto <vytorcalixto@gmail.com> Date: Mon, 24 Apr 2017 19:55:33 -0300 Subject: [PATCH] Cria arquivo para tipo No --- Makefile | 2 +- filha.c | 50 +++++++++++++++++--------------------------------- filha.h | 18 +++++------------- main.c | 24 ++++++++++++------------ no.c | 39 +++++++++++++++++++++++++++++++++++++++ no.h | 27 +++++++++++++++++++++++++++ 6 files changed, 101 insertions(+), 59 deletions(-) create mode 100644 no.c create mode 100644 no.h diff --git a/Makefile b/Makefile index c9d4265..f6c0983 100644 --- a/Makefile +++ b/Makefile @@ -10,7 +10,7 @@ test: main chmod +x runTests.sh; \ ./runTests.sh -main: main.c tabuleiro.o filha.o +main: main.c tabuleiro.o filha.o no.o $(CC) $(CFLAGS) -o $@ $^ clean: diff --git a/filha.c b/filha.c index 8cefe87..841081d 100644 --- a/filha.c +++ b/filha.c @@ -1,11 +1,7 @@ -#include "filha.h" #include <stdbool.h> #include <stdlib.h> - -struct No { - void *conteudo; - No anterior, proximo; -}; +#include "filha.h" +#include "no.h" struct Filha { unsigned int tamanho; @@ -24,58 +20,46 @@ unsigned int tamanhoFilha(Filha f) { return f->tamanho; } -No primeiroNo(Filha f) { +No primeiroNoFilha(Filha f) { if(f->tamanho == 0) { return NULL; } No n = f->primeiro; - f->primeiro = f->primeiro->proximo; - n->anterior = NULL; - n->proximo = NULL; + f->primeiro = getSucessorNo(f->primeiro); + setSucessorNo(n, NULL); + setAntecessorNo(n, NULL); return n; } -No ultimoNo(Filha f) { +No ultimoNoFilha(Filha f) { if(f->tamanho == 0) { return NULL; } No n = f->ultimo; - f->ultimo = f->ultimo->anterior; - n->anterior = NULL; - n->proximo = NULL; + f->ultimo = getAntecessorNo(f->ultimo); + setSucessorNo(n, NULL); + setAntecessorNo(n, NULL); return n; } -No sucessorNo(No n) { - return n->proximo; -} - -No antecessorNo(No n) { - return n->anterior; -} - -void *conteudo(No n) { - return n->conteudo; -} - -No insere(void *conteudo, Filha f) { - No novo = malloc(sizeof(struct No)); +No insereFilha(void *conteudo, Filha f) { + No novo = criaNo(); if(!novo) return NULL; - novo->conteudo = conteudo; - novo->anterior = f->ultimo; + setConteudo(novo, conteudo); + setAntecessorNo(novo, f->ultimo); ++f->tamanho; return f->ultimo = novo; } -bool destroi(Filha f, bool destroi(void *)) { +bool destroiFilha(Filha f, bool destroi(void *)) { No n; bool ok=true; - while( (n = primeiroNo(f)) ) { + while( (n = primeiroNoFilha(f)) ) { if(destroi) - ok &= destroi(conteudo(n)); + ok &= destroi(getConteudo(n)); free(n); } free(f); diff --git a/filha.h b/filha.h index f011de4..b4831a5 100644 --- a/filha.h +++ b/filha.h @@ -1,6 +1,7 @@ #ifndef _FILHA_ #define _FILHA_ #include <stdbool.h> +#include "no.h" // Filha é uma estrutura que pode ser vista como Fila ou Pilha typedef struct Filha *Filha; @@ -16,24 +17,15 @@ Filha constroiFilha(); unsigned int tamanhoFilha(Filha f); // Remove o primeiro nó da filha f ou retorna NULL se f for vazia -No primeiroNo(Filha f); +No primeiroNoFilha(Filha f); // Remove o último nó da filha f ou retorna NULL se f for vazia -No ultimoNo(Filha f); - -// Devolve o nó sucessor de n ou NULL se n é o último nó da filha -No sucessorNo(No n); - -// Devolve o nó antecessor de n ou NULL se n é o primeiro nó da filha -No antecessorNo(No n); - -// Devolve o conteúdo de n -void *conteudo(No n); +No ultimoNoFilha(Filha f); // Insere um novo nó no fim da Filha f // // Devolve o nó recém criado ou NULL em caso de falha -No insere(void *conteudo, Filha f); +No insereFilha(void *conteudo, Filha f); // Desaloca a filha f e todos os seus nós // @@ -42,7 +34,7 @@ No insere(void *conteudo, Filha f); // para cada nó n da filha // // devolve true em caso de sucesso ou false em caso de falha -bool destroi(Filha f, bool destroi(void *)); +bool destroiFilha(Filha f, bool destroi(void *)); // Impreme todos os nós da filha f // diff --git a/main.c b/main.c index d06e60b..84718e0 100644 --- a/main.c +++ b/main.c @@ -3,27 +3,27 @@ #include <stdio.h> #include <time.h> #include "tabuleiro.h" -#include "jogador.h" +// #include "jogador.h" int main() { Tblr t = criaTblr(); - // Aloca o tabuleiro em um único array em vez de um "array de arrays" + // Aloca o tabuleiro em um único array em vez de um "array de arrays" if(!leTblr(t)) { puts("Erro na leitura do tabuleiro"); return -1; } imprimeTblr(t); - // declara o grafo ponderado e seu primeiro nodo - grafo = criaGrafo(t); - if(grafo == NULL)) { - puts("Erro na criacao do grafo"); - return -1; - } - // faz o jogador jogar o jogo a partir do tabuleiro dado - // o retorno do jogador sera um vetor contendo os numeros referentes a menor jogada encontrada por ele - int *jogadas; - jogadas = Joga(grafo, t); + // // declara o grafo ponderado e seu primeiro nodo + // grafo = criaGrafo(t); + // if(grafo == NULL)) { + // puts("Erro na criacao do grafo"); + // return -1; + // } + // // faz o jogador jogar o jogo a partir do tabuleiro dado + // // o retorno do jogador sera um vetor contendo os numeros referentes a menor jogada encontrada por ele + // int *jogadas; + // jogadas = Joga(grafo, t); return 0; } diff --git a/no.c b/no.c new file mode 100644 index 0000000..b88cfce --- /dev/null +++ b/no.c @@ -0,0 +1,39 @@ +#include <stdlib.h> +#include "no.h" + +struct No { + void *conteudo; + No anterior, proximo; +}; + +No criaNo() { + No n = malloc(sizeof(struct No)); + + n->anterior = NULL; + n->proximo = NULL; + return n; +} + +No getSucessorNo(No n) { + return n->proximo; +} + +void setSucessorNo(No n, No p) { + n->proximo = p; +} + +No getAntecessorNo(No n) { + return n->anterior; +} + +void setAntecessorNo(No n, No p) { + n->anterior = p; +} + +void *getConteudo(No n) { + return n->conteudo; +} + +void setConteudo(No n, void *conteudo) { + n->conteudo = conteudo; +} diff --git a/no.h b/no.h new file mode 100644 index 0000000..343bb78 --- /dev/null +++ b/no.h @@ -0,0 +1,27 @@ +#ifndef _NO_ +#define _NO_ + +// Nó cujo conteúdo é um void * +typedef struct No *No; + +// Cria um nó vazio e devolve +No criaNo(); + +// Devolve o nó sucessor de n ou NULL se n é o último nó da filha +No getSucessorNo(No n); + +// Define o nó sucessor de n +void setSucessorNo(No n, No p); + +// Devolve o nó antecessor de n ou NULL se n é o primeiro nó da filha +No getAntecessorNo(No n); + +// Define o nó antecessor de n +void setAntecessorNo(No n, No p); + +// Devolve o conteúdo de n +void *getConteudo(No n); + +void setConteudo(No n, void *conteudo); + +#endif -- GitLab