Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
What's new
7
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Open sidebar
Vytor Calixto
Enchente
Commits
7cd4afbb
Commit
7cd4afbb
authored
Apr 24, 2017
by
Vytor Calixto
👾
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Cria arquivo para tipo No
parent
b339a9ee
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
101 additions
and
59 deletions
+101
-59
Makefile
Makefile
+1
-1
filha.c
filha.c
+17
-33
filha.h
filha.h
+5
-13
main.c
main.c
+12
-12
no.c
no.c
+39
-0
no.h
no.h
+27
-0
No files found.
Makefile
View file @
7cd4afbb
...
...
@@ -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
:
...
...
filha.c
View file @
7cd4afbb
#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
primeiroNo
Filha
(
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
ultimoNo
Filha
(
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
->
c
onteudo
=
conteudo
;
novo
->
anterior
=
f
->
ultimo
;
setC
onteudo
(
novo
,
conteudo
)
;
setAntecessorNo
(
novo
,
f
->
ultimo
)
;
++
f
->
tamanho
;
return
f
->
ultimo
=
novo
;
}
bool
destroi
(
Filha
f
,
bool
destroi
(
void
*
))
{
bool
destroi
Filha
(
Filha
f
,
bool
destroi
(
void
*
))
{
No
n
;
bool
ok
=
true
;
while
(
(
n
=
primeiroNo
(
f
))
)
{
while
(
(
n
=
primeiroNo
Filha
(
f
))
)
{
if
(
destroi
)
ok
&=
destroi
(
c
onteudo
(
n
));
ok
&=
destroi
(
getC
onteudo
(
n
));
free
(
n
);
}
free
(
f
);
...
...
filha.h
View file @
7cd4afbb
#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
primeiroNo
Filha
(
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
insere
Filha
(
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
destroi
Filha
(
Filha
f
,
bool
destroi
(
void
*
));
// Impreme todos os nós da filha f
//
...
...
main.c
View file @
7cd4afbb
...
...
@@ -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
;
}
...
...
no.c
0 → 100644
View file @
7cd4afbb
#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
;
}
no.h
0 → 100644
View file @
7cd4afbb
#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
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment