leccion 3.1 pilas
TRANSCRIPT
-
8/8/2019 Leccion 3.1 Pilas
1/21
ESTRUCTURAS DE DATOS LECCION 3.1 PILAS Pgina 1
LECCION 3.1 PILAS
Definicin:
Son aquellas que solo tiene 2 operaciones, Push(Insercin) y Pop(Eliminacin) la cual solo se puede
efectuar por un extremo llamado Top. Sin Embargo se le pueden aplicar todas las operacines al igualque a las listas.
Una pila (stacken ingls) es una lista ordinal o estructura de datos en la que el modo de acceso a suselementos es de tipo LIFO (del inglsLast In First Out, ltimo en entrar, primero en salir) que
permite almacenar y recuperar datos. Se aplica en multitud de ocasiones en informtica debido a su
simplicidad y ordenacin implcita en la propia estructura.
Para el manejo de los datos se cuenta con dos operaciones bsicas: apilar (push), que coloca un objetoen la pila, y su operacin inversa, retirar (o desapilar,pop), que retira el ltimo elemento apilado.
En cada momento slo se tiene acceso a la parte superior de la pila, es decir, al ltimo objeto apilado(denominado TOS, Top of Stacken ingls). La operacin retirar permite la obtencin de este elemento,
que es retirado de la pila permitiendo el acceso al siguiente (apilado con anterioridad), que pasa a ser el
nuevo TOS.
Por analoga con objetos cotidianos, una operacin apilar equivaldra a colocar un plato sobre una pila
de platos, y una operacin retirar a retirarlo.
-
8/8/2019 Leccion 3.1 Pilas
2/21
ESTRUCTURAS DE DATOS LECCION 3.1 PILAS Pgina 2
Para entender el funcionamiento de una pila, vamos a ver como trabaja usando un programa escrito enlenguaje C++. Puedes descargar el programa desde la leccion o teclear el codigo que estara en el
apendice
Recorrido
Definicin:
Ya que las pilas son LIFO(Last in - First Out) el Recorrido se hace sacando el ultimo dato que se inserto
hasta que no encuentre ningn otro.
Detalle:
Apuntador toma el Top, despus ve si la condicin cumple para efectuar un Ciclo mientras Apuntador
sea diferente de Nulo, si cumple lo que hace es que despliega el contenido de la Pila(Pila[Apuntador]),despus Apuntador se le resta 1. Este proceso se repite hasta que Apuntador sea igual Nulo(Cuandollega a este punto la Pila ya fue Recorrida).
Algoritmo:
Recorrido(Pila, Top)
Apuntador - Top
Repetir mientras Apuntador Nulo
Imprimir Pila[Apuntador]
Apuntador - Apuntador - 1
Fin del ciclo
-
8/8/2019 Leccion 3.1 Pilas
3/21
ESTRUCTURAS DE DATOS LECCION 3.1 PILAS Pgina 3
Salir
Diagrama:
Corrida:
Push
Definicin:
-
8/8/2019 Leccion 3.1 Pilas
4/21
ESTRUCTURAS DE DATOS LECCION 3.1 PILAS Pgina 4
Push es simplemente el mtodo por el cual va agregando un Dato nuevo a la Pila tomando en cuenta la
Capacidad Mxima (Max) de almacenar un dato.
Detalle:
Compara en un principio el Top con Max, si la condicin no cumple es imposible insertar mas datos a laPila, de otra forma lo que hace es Incrementar el valor de Top, y copia el valor de Elemento en
Pila[Top]. De esta forma el dato ya esta insertado.
Algoritmo:
Push(Pila, Top, Max, Elemento)
Si Top Max
Top - Top + 1
Pila[Top] - Elemento
Si no:
Imprimir Pila Llena
Salir
Diagrama:
-
8/8/2019 Leccion 3.1 Pilas
5/21
ESTRUCTURAS DE DATOS LECCION 3.1 PILAS Pgina 5
Corrida:
Pop
Definicin:
Pop es simplemente el mtodo por el cual va sacando el ultimo Dato de la Pila, basndose nicamente
en el Top.
Detalle:
Compara para determinar si la pila esta vacio, de otra forma lo que hace es Imprimir el valor de
Pila[Top] (Que es el dato que esta apunto de Eliminar) y enseguida a Top le resta 1, de esta forma el
dato ya no existe.
-
8/8/2019 Leccion 3.1 Pilas
6/21
ESTRUCTURAS DE DATOS LECCION 3.1 PILAS Pgina 6
Algoritmo:
Pop(Pila, Top)
Si Top Nulo
Imprimir Pila[Top]
Top - Top - 1
Si no:
Imprimir Pila Vaca
Salir
Diagrama:
Corrida:
-
8/8/2019 Leccion 3.1 Pilas
7/21
ESTRUCTURAS DE DATOS LECCION 3.1 PILAS Pgina 7
Bsqueda
Definicin:
Este mtodo usa el recorrido para encontrar Elemento y desplegar un mensaje si la bsqueda es exitosa.
Detalle:
El algoritmo compara para determinar si la Pila tiene algn dato, si no simplemente desplegara Lista
Vaca y saldr. De otra manera har un Recorrido y comparara con cada uno de los Datos de la Pila
hasta encontrar el dato que desea buscar. Si lo encuentra desplegara El Dato fue encontrado de otra
manera El Dato no se encontr.
Algoritmo:
Busqueda(Pila, Top, Elemento)
Si Top Nulo
Apuntador - Top
Repetir mientras Apuntador Nulo
Si Pila[Apuntador] = Elemento
Imprimir El Dato fue encontrado y Salir
Apuntador - Apuntador - 1
Fin del ciclo
Imprimir El Dato no se encontr
-
8/8/2019 Leccion 3.1 Pilas
8/21
ESTRUCTURAS DE DATOS LECCION 3.1 PILAS Pgina 8
Si no:
Imprimir Pila Vaca
Salir
Diagrama:
Corrida:
-
8/8/2019 Leccion 3.1 Pilas
9/21
ESTRUCTURAS DE DATOS LECCION 3.1 PILAS Pgina 9
Eliminacion
Definicin:
Este mtodo busca un Dato dentro de la pila y lo elimina.
Detalle:
El algoritmo compara para determinar si la Pila tiene algn dato, si no simplemente desplegara Pila
Vaca y saldr. De otra manera har un Recorrido y comparara con cada uno de los Datos de la Pila
hasta encontrar el dato que desea eliminar, mientras hace esto copia cada uno de los datos a un arregloTemp para cuando encuentre el Dato regresar esos valores a la Pila. Si lo encuentra desplegara
Eliminado el Dato y le restara 1 a Top, de otra manera El Dato no encontrado.
Algoritmo:
Borrar(Pila, Temp, Top, Elemento)
Si Top Nulo
Apuntador1 - Top
Repetir mientras Apuntador1 Nulo
Si Pila[Apuntador1] = Elemento
Imprimir Eliminando el Dato
Repetir mientras Apuntador2 Nulo
Pila[Apuntador1]=Temp[Apuntador2]
Fin del ciclo
Top - Top - 1 y Salir
Si No:
Temp[Apuntador2] - Pila[Apuntador1]
Apuntador1 - Apuntador1 - 1
-
8/8/2019 Leccion 3.1 Pilas
10/21
ESTRUCTURAS DE DATOS LECCION 3.1 PILAS Pgina 10
Apuntador2 - Apuntador2 + 1
Fin del ciclo
Imprimir Dato no encontrado
Si no:
Imprimir Pila Vaca
Salir
Diagrama:
Corrida:
-
8/8/2019 Leccion 3.1 Pilas
11/21
ESTRUCTURAS DE DATOS LECCION 3.1 PILAS Pgina 11
A continuacion, se muestra el algoritmo en pseudocodigo de cmo quedaria el programa para las PILAS.
Este algoritmo esta creado usando el software SLE 2.0, que es mas poderoso que el PseInt y es muy semejante a
C++. En el Apendice, viene el codigo completo en C++, pero para necesitamos darnos una idea general del
algoritmo.NOTA: Este algoritmo tiene un modulo que no esta escrito. Como ejercicio, deberas crearlo (puedes
basarte en el programa en C++ del Apendice)
/* Algoritmo que muestra el funcionamiento de las PILAS */
/* El programa no esta completo, ya que falta algo, el alumno debera
identificar que es... */
programa Pilas
var
pila : vector [10] numerico
top = 0
max = 10res,op : numerico
inicio
mientras (op6)
{
cls()
imprimir ("\n1) Recorrido\n2) Busqueda\n3) Push\n4) Pop\n5) Eliminar Dato\n6) Salir")
imprimir ("\nQue deseas hacer? ")
leer (op)
si (op == 1 )
{
imprimir ("\nSelecciono recorrido")
recorrido()
readkey()
sino si (op == 2 )
imprimir ("\nQue numero deseas buscar?")
leer (res)
busqueda( res )
readkey()
-
8/8/2019 Leccion 3.1 Pilas
12/21
ESTRUCTURAS DE DATOS LECCION 3.1 PILAS Pgina 12
sino si ( op == 3 )
imprimir ("\nQue numero deseas insertar?")
leer (res)
push_insertar( res )
sino si (op == 4 )
imprimir ("\nSelecciono Pop")pop_sacar()
recorrido()
readkey()
sino si (op == 5 )
imprimir ("\nSelecciono Eliminar")
sino
imprimir ("\nsalida")
}
}
fin
subrutina push_insertar ( valor : numerico )/* Insertar un elemento */
var
ok=" "
inicio
si (top max )
{
top= top + 1
pila[top] = valor
sino
imprimir ("\nPila Llena")
readkey()}
fin
subrutina recorrido()
/* Mostrar todos los elementos de la pila */
var
k : numerico
inicio
si (top -1 )
{
desde k=1 hasta 10
{
imprimir ("\nPila: ",pila[k] )
}
sino
imprimir ("\nPila Vacia")
readkey()
}
fin
-
8/8/2019 Leccion 3.1 Pilas
13/21
ESTRUCTURAS DE DATOS LECCION 3.1 PILAS Pgina 13
subrutina busqueda( valor:numerico)
var
i:numerico
inicio
desde i=1 hasta 10{
si (valor == pila[i] )
{
imprimir ("\nDato ",pila[i]," encontrado en la posicion ",i,"\nPulsa una tecla para salir")
readkey()
salir
sino
imprimir ("\nDato NO encontrado...")
readkey()
}
}
fin
subrutina pop_sacar()
inicio
si (top-1)
{
imprimir ("\nSacando el dato: ",pila[top])
pila[top]=0
top = top - 1
readkey()
sino
imprimir ("\nPila vacia... Imposible eliminar")}
fin
Para ver el funcionamiento de este algoritmo puedes descargar el programa PILAS.EXE que se encuentra
en la seccion biblioteca del curso.
-
8/8/2019 Leccion 3.1 Pilas
14/21
ESTRUCTURAS DE DATOS LECCION 3.1 PILAS Pgina 14
APENDICE
Codigo en lenguaje C++ de una pila.
**#include **#include
#include
#include
#include
class Alumno
{
private:
int Pila[10],Top,Max;
char Pila1[10][10];
public:
Alumno()
{
int i,j;
char Nulo[2]=" ";
Max=9;
Top=-1;
for(i=1;i
-
8/8/2019 Leccion 3.1 Pilas
15/21
ESTRUCTURAS DE DATOS LECCION 3.1 PILAS Pgina 15
if(Top!=Max)
{
Top++;
Pila[Top]=Elem;
}
else
cout
-
8/8/2019 Leccion 3.1 Pilas
16/21
ESTRUCTURAS DE DATOS LECCION 3.1 PILAS Pgina 16
cout
-
8/8/2019 Leccion 3.1 Pilas
17/21
ESTRUCTURAS DE DATOS LECCION 3.1 PILAS Pgina 17
}
void Borrar(int Elem)
{
int Temp[10],i=0,j=Top;
if(Top==-1)
{
cout
-
8/8/2019 Leccion 3.1 Pilas
18/21
ESTRUCTURAS DE DATOS LECCION 3.1 PILAS Pgina 18
cout
-
8/8/2019 Leccion 3.1 Pilas
19/21
ESTRUCTURAS DE DATOS LECCION 3.1 PILAS Pgina 19
case 3:
cout 0
Console.WriteLine("El Valor obtenido de la lista es: {0}", oPila.Pop)
End WhileConsole.ReadLine()
End Sub
End Module
---------------------------------------------------------------------------------------------------------------------------
-
8/8/2019 Leccion 3.1 Pilas
20/21
ESTRUCTURAS DE DATOS LECCION 3.1 PILAS Pgina 20
Module Module1
Public Sub main()
'crearemos una cola
Dim oCola As Queue
oCola = New Queue
'para aadir valores, usamos el metodo enqueue()
oCola.Enqueue("H") 'ESTE SERA EL PRIMERO EN SALIR
oCola.Enqueue("A")
oCola.Enqueue("N")
oCola.Enqueue("D")
oCola.Enqueue("S") 'este sera el ultimo en salir
'para extraer un valor de la cola, usamos el metodo dequeue,
'dicho valor se eliminara de la lista
While oCola.Count > 0
Console.WriteLine("El Valor obtenido de la lista es: {0}", oCola.Dequeue)
End While
Console.ReadLine()End Sub
End Module
Y en Java quedaria mas o menos asi:
import java.io.Serializable;
publicclass Pila extends Lista implements Serializable
{
public Pila (){
super();
}
publicvoid apilar(Tipo dato)
{
super.addInit(dato);
}
public Tipo desapilar()
{
return (Tipo) super.removeInit();
}
public Tipo cima()
{
return (Tipo) getDato(0);
}
}
-
8/8/2019 Leccion 3.1 Pilas
21/21
ESTRUCTURAS DE DATOS LECCION 3.1 PILAS Pgina 21