Documentos de Académico
Documentos de Profesional
Documentos de Cultura
GESTIÓN DE
MEMORIA
DINÁMICA
Base de la pila
cima
EJEMPLOS DE PILAS
Un ejemplo es un montón de platos colocados uno encima del otro: Cuando
se quiere introducir un nuevo plato, éste se coloca en la posición más
accesible, encima del último plato. Cuando se toma un plato, éste se extrae,
igualmente, del punto más accesible, el último que se ha introducido.
Otro ejemplo es una caja llena de libros. Sólo podemos ver cuál es el libro
que está más arriba en la caja, y si ponemos o tomamos un libro, sólo
podremos actuar sobre este primer libro. No podemos siquiera saber el
número total de libros guardados en la pila. Sólo sabremos el número de
elementos de la pila de libros si previamente los sacamos hasta vaciar la
caja.
EJEMPLOS DE PILAS
Otra aplicación de la estructura pila es durante la ejecución de un
programa de computadora, en la forma en que la máquina procesa las
llamadas a los procedimientos. Cada llamada a un procedimiento (o
función) hace que el sistema almacene toda la información asociada
con ese procedimiento (parámetros, variables, constantes, dirección de
retorno, etc...) de forma independiente a otros procedimientos y
permitiendo que unos procedimientos puedan invocar a otros distintos
(o a si mismos) y que toda esa información almacenada pueda ser
recuperada convenientemente cuando corresponda. Como en un
procesador sólo se puede estar ejecutando un procedimiento, esto
quiere decir que sólo es necesario que sean accesibles los datos de un
procedimiento (el último activado, el que está en la cima). De ahí que la
estructura pila sea apropiada para este fin.
OPERACIONES CON UNA PILA
INICIACIÓN DE LA ESTRUCTURA:
- CREAR LA PILA: INICIA LA PILA COMO VACÍA
3
CLASE PILA
class Pila {
// campos Pila
int cima; cima
int[] elem; elem[]
MAX
final int MAX=50;
Constructor por defecto
// constructor pilaVacia()
public Pila () pilaLlena()
{ cima=0; ver()
eliminar()
elem = new int[MAX + 1]; insertar(x)
}
// verifica si la pila está vacía
public boolean pilaVacia()
{ return cima==0; }
CLASE PILA
// verifica si la pila está llena
public boolean pilaLlena() Pila
{ return cima==MAX; } cima
// ver el elemento de la CIMA elem[]
public int ver () MAX
{ return elem[cima]; } Constructor por defecto
// eliminar el elemento de la CIMA pilaVacia()
pilaLlena()
public void eliminar() ver()
{ if (!pilaVacia() ) {cima = cima - 1; } } eliminar()
// insertar un elemento por la CIMA insertar(x)
public void insertar (int x)
{ if (!pilaLlena() ) { cima = cima + 1;
elem[cima] = x; }
}
}
CLASE OPERACIONES
class Operaciones {
// INSERTAR N ELEMENTOS
public Pila insertarN(Pila p) Operaciones
{ System.out.print("Nº de elementos= ");
int n=Leer.datoInt();
insertarN(p)
int d; mostrar(p)
for(int c=1;c<=n && !p.pilaLlena();++c) eliminarPos(p)
{System.out.print("Dato"+c+"= ");
d=Leer.datoInt();
p.insertar(d);
}
return p;
}
CLASE OPERACIONES
// MOSTRAR
public void mostrar(Pila p)
{ Pila paux=new Pila(); // SE CREA UNA PILA AUXILIAR VACIA: paux
int d; // SE VACÍA LA PILA p EN LA PILA paux
while(!p.pilaVacia()) {
// SE RECUPERA EL ELEMENTO DE LA CIMA DE LA PILA p Y SE LO MUESTRA
d=p.ver();
System.out.println(" "+d);
p.eliminar(); // SE ELIMINA EL ELEMENTO DE LA CIMA DE p
paux.insertar(d); // SE INSERTA EN LA CIMA DE paux EL ELEMENTO
ELIMINADO DE p
} // AL FINAL LA PILA p QUEDA VACIA Y paux CON LOS ELEMENTOS DE p,
INVERTIDOS
CLASE OPERACIONES