diff --git a/Makefile b/Makefile index c9d42653a6a8e4676c2fae504b918bae2b61dff1..f6c09837b350bcbd2100eb1ce4670d37a82cff45 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 8cefe87f591c833a4527c0624fce4dcc6a66d2a8..841081d1646162662f6adda58d0c8edbf2f54ff2 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 f011de42bfdf16acaefb481ec2e139e18f4421d1..b4831a5dcb22075290c508919dfac50b1d98d59e 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 d06e60b1811f5ff5cc6be04debcc1606e4ab6eeb..84718e0cac595df21585541ea829ff204845f9b8 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 0000000000000000000000000000000000000000..b88cfce6e0a4b6e7d03fc8691f67014756a513b4 --- /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 0000000000000000000000000000000000000000..343bb78dec3a7a3b2d0289dd3c3c71808c69c83e --- /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