Professional Documents
Culture Documents
INTRODUCCIN.............................................................................................................. 2
METODOS....................................................................................................................... 3
RESULTADOS................................................................................................................. 15
CONCLUSIONES............................................................................................................ 18
BIBLIOGRAFA............................................................................................................... 19
INTRODUCCIN
Una de las aplicaciones ms interesantes y potentes de la memoria dinmica y
los punteros son las estructuras dinmicas de datos. Las estructuras bsicas
disponibles en C y C++ tienen una importante limitacin: no pueden cambiar
de tamao durante la ejecucin. Los arreglos estn compuestos por un
determinado nmero de elementos, nmero que se decide en la fase de diseo,
antes de que el programa ejecutable sea creado.
En muchas ocasiones se necesitan estructuras que puedan cambiar el tamao
durante la ejecucin del programa. Por supuesto, podemos hacer arrays
dinamicos, pero una vez creados, su tamao tambin ser fijo, y para hacer
que crezcan o disminuyan de tamao, deberemos reconstruirlas desde el
principio.
Las estructuras dinmicas nos permiten crear estructuras de datos que se
adapten a las necesidades reales a las que suelen enfrentarse nuestros
programas. Pero no solo eso como veremos, tambin nos permitirn crear
estructuras de datos muy flexibles, ya sea en cuanto a orden, estructura
interna o las relaciones entre los elementos que las componen.
Las estructuras de datos estn compuestas de otras pequeas estructuras a las
que llamaremos nodos o elementos, que agrupan los datos con los que
trabajar nuestro programa y adems uno o ms punteros autoreferenciales, es
decir punteros a objetos del mismo tipo nodo.
METODOS
ESPECIFICACION
JUGADA
tiempo
inicio
tiempo
fin
Real
tiempojugada
VARIABLES:
Entero
Entero
Entero
numerojugada
Logico
perdio
OPERACIONES
ingresarCoordenadas ()
: No retorna Valor
FijarTiempoJugada ()
: no retorna valor
ConseguirTiempoJugada ()
obtenerX ()
obtenerY()
FijarInicioJugada()
: No retorna valor
FijarFinJugada()
: No retorna valor
ConseguirPerdio()
FijarPerdio()
: No retorna valor
3
FijarNumeroJugada(entero:n)
: No retorna valor
ConseguirNumeroJugada()
SIGNIFICADO
Algoritmos importantes:
procedimiento ingresarCoordenadas
escribir(" ingresar x: ")
leer(x)
escribir ("ingresar y: )
leer(y)
fin ingresarCoordenadas
procedimiento FijarTiempoJugada
tiempojugada fin - inicio
fin FijarTiempoJugada
ESPECIFICACION
POSICION
VARIABLES:
num
Se_muestra :
caracter
Logico
OPERACIONES
Mostrar ()
: no retorna valor
fijarNumero ()
: no retorna valor
conseguirNumero ()
fijarSe_muestra ()
conseguirSe_muestra()
SIGNIFICADO
ESPECIFICACION
NODOPUNTAJE
Cadena
jugador
Real
tiempo
VARIABLES:
OPERACIONES
mostrarPuntaje ()
: no retorna valor
FijarJugador (cadena: x)
: no retorna valor
FijarTiempo (Real: x)
: no retorna valor
ConseguirTiempo ()
SIGNIFICADO
Algoritmos importantes:
procedimiento mostrarPuntaje
escribir("Nombre : ", jugador)
escribir ("Tiempo: , tiempo )
fin mostrarPuntaje
ESPECIFICACION
LISTA_PUNTAJE
USA: NODOPUNTAJE
VARIABLES:
NODOPUNTAJE
LISTA_PUNTAJE
p
sgte
OPERACIONES
insertar(LISTA_PUNTAJE: raiz, NODOPUNTAJE: np)
: no retorna
valor
visualizar(LISTA_PUNTAJE: raiz)
: no retorna
valor
VerificarNuevoRecord(LISTA_PUNTAJE: raiz, NODOPUNTAJE: np) : retorna valor
lgico
SIGNIFICADO
Algoritmos importantes:
procedimiento insertar(LISTA_PUNTAJE: raiz, NODOPUNTAJE: np)
LISTA_PUNTAJE: n
LISTA_PUNTAJE: q
n.pnp
Si raiz=NULL entonces
Raizn
sino
qraiz
mientras (q.sgte no es NULL) hacer
qq.sgte
fin mientras
6
q.sgten
fin si
n.sgteNULL
fin mostrarPuntaje
ESPECIFICACION
TERRENO
USA: POSICION
USA: JUGADA
VARIABLES:
POSICION
pos
JUGADA
jugada
TERRENO
abaj
TERRENO
sgte
TERRENO
arriba
TERRENO
ante
Entero
nn
OPERACIONES
TERRENO
dameSig (TERRENO: nodo, entero: nn)
: no retorna valor
: retorna valor
TERRENO
nodo_dev (TERRENO: raiz, entero: a, entero: b)
: retorna valor
TERRENO
Mostrar(TERRENO: raiz, entero: nn, entero: x, entero: y) : retorna valor
lgico
ResolverJuego(TERRENO: raiz,entero: nn)
: no retorna valor
: no retorna valor
Algoritmos importantes:
funcion dameSig (TERRENO: nodo, entero: nn): TERRENO
devolver nodo.sgte
fin dameSig
funcion nodo_dev (TERRENO: raiz, entero: a, entero: b) : TERRENO
8
TERRENO: q
Entero: i,j
qraiz
i0
j0
mientras i<a hacer
q-q.abaj
ii+1
fin mientras
mientras j<b hacer
qq.sgte
jj+1
fin mientras
devolver q
fin nodo_dev
funcion Mostrar(TERRENO: raiz, entero: nn, entero: x, entero: y): logico
entero: i,j
logico: primerafila, perdio
primerafila falso
perdio falso
i0
mientras i<=nn hacer
j0
mientras j<=nn hacer
Si i=0 entonces
Si (j==0) entonces
Imprimir(" ")
sino
Imprimir(" x",j)
Fin si
Si j=0 entonces
Imprimir ("y",i)
Si i=y y j=x y
nodo_dev(raiz,i-1,j-1).pos.conseguirSe_muestra() es falso
entonces
9
nodo_dev(raiz,i-1,j-1).pos.Mostrar()
nodo_dev(raiz,i-1,j-1).pos.fijarSe_muestra(verdadero)
Si
nodo_dev(raiz,i-1,j-1).pos.conseguirNumero()='M'
entonces
perdio verdadero
Fin si
Si nodo_dev(raiz,i-1,j-1).pos.conseguirSe_muestra()
entonces
nodo_dev(raiz,i-1,j-1).pos.Mostrar()
sino
Imprimir (" @")
Fin si
jj+1
Fin mientras
Imprimir salto de linea
ii+1
Fin mientras
devolver perdio
fin mostrar
procedimiento ResolverJuego(TERRENO: raiz,entero: nn)
entero i,j
i0
mientras i<=nn hacer
imprimir salto de linea
j0
mientras j<=nn hacer
Si i=0 entonces
Si j=0 entonces
Imprimir(" ")
Sino
Imprimir(" x",j)
Fin si
Si j=0 entonces
Imprimir("y",i)
10
Si no
nodo_dev(raiz,i-1,j-1).pos.Mostrar()
Fin si
jj+1
Fin mientras
imprimir salto de linea
ii+1
Fin mientras
Fin ResolverJuego
caso 0 :
n '0'
case 1 :
n '1'
case 2 :
n '2'
case 3 :
n '3'
case 4 :
n '4'
case 5 :
n '5
case 6 :
n '6'
case 7 :
n '7'
case 8 :
n '8'
Fin seleccion
Nodo.pos.fijarNumero(n)
Fin si
jj+1
Fin mientras
ii+1
Fin mientras
Fin MinasCercanas
Si j = 0 entonces
n.ante NULL
Fin si
jj+1;
Fin mientras
n.sgte nodo_dev(raiz,i,0)
ii+1
Fin mientras
Fin registrarMinas
15
RESULTADOS
CONCLUSIONES
Las listas enlazadas poseen muchas ventajas sobre los vectores. Los elementos
se pueden insertar en una lista indefinidamente mientras que un vector tarde o
temprano se llenar necesitar ser redimensionado, una costosa operacin
que incluso puede no ser posible si la memoria se encuentra fragmentada.
Las listas doblemente enlazadas requieren ms espacio por nodo y sus
operaciones bsicas resultan ms costosas pero ofrecen una mayor facilidad
para manipular ya que permiten el acceso secuencial a lista en ambas
direcciones.
18
BIBLIOGRAFA
19