Leccion 3.1 Pilas
Leccion 3.1 Pilas
Leccion 3.1 Pilas
1 PILAS
Definición:
Son aquellas que solo tiene 2 operaciones, Push(Inserción) y Pop(Eliminación) la cual solo se puede
efectuar por un extremo llamado Top. Sin Embargo se le pueden aplicar todas las operaciónes al igual
que a las listas.
Una pila (stack en inglés) es una lista ordinal o estructura de datos en la que el modo de acceso a sus
elementos es de tipo LIFO (del inglés Last In First Out, último en entrar, primero en salir) que
permite almacenar y recuperar datos. Se aplica en multitud de ocasiones en informática debido a su
simplicidad y ordenación implícita en la propia estructura.
Para el manejo de los datos se cuenta con dos operaciones básicas: apilar (push), que coloca un objeto
en la pila, y su operación inversa, retirar (o desapilar, pop), que retira el último elemento apilado.
En cada momento sólo se tiene acceso a la parte superior de la pila, es decir, al último objeto apilado
(denominado TOS, Top of Stack en inglés). La operación retirar permite la obtención 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 analogía con objetos cotidianos, una operación apilar equivaldría a colocar un plato sobre una pila
de platos, y una operación retirar a retirarlo.
Recorrido
Definición:
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 ningún otro.
Detalle:
Apuntador toma el Top, después ve si la condición 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]),
después Apuntador se le resta 1. Este proceso se repite hasta que Apuntador sea igual Nulo(Cuando
llega a este punto la Pila ya fue Recorrida).
Algoritmo:
Recorrido(Pila, Top)
Apuntador ←- Top
Imprimir Pila[Apuntador]
Apuntador ←- Apuntador - 1
Diagrama:
Corrida:
Push
Definición:
Detalle:
Compara en un principio el Top con Max, si la condición no cumple es imposible insertar mas datos a la
Pila, 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:
Top ←- Top + 1
Pila[Top] ←- Elemento
Si no:
Salir
Diagrama:
Pop
Definición:
Pop es simplemente el método por el cual va sacando el ultimo Dato de la Pila, basándose ú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.
Pop(Pila, Top)
Imprimir Pila[Top]
Top ←- Top - 1
Si no:
Salir
Diagrama:
Corrida:
Definición:
Este método usa el recorrido para encontrar Elemento y desplegar un mensaje si la búsqueda es exitosa.
Detalle:
El algoritmo compara para determinar si la Pila tiene algún dato, si no simplemente desplegara Lista
Vacía 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:
Apuntador ←- Top
Si Pila[Apuntador] = Elemento
Apuntador ←- Apuntador - 1
Salir
Diagrama:
Corrida:
Detalle:
El algoritmo compara para determinar si la Pila tiene algún dato, si no simplemente desplegara Pila
Vacía 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 arreglo
Temp 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:
Apuntador1 ←- Top
Si Pila[Apuntador1] = Elemento
Pila[Apuntador1]=Temp[Apuntador2]
Si No:
Temp[Apuntador2] ←- Pila[Apuntador1]
Apuntador1 ←- Apuntador1 - 1
Si no:
Salir
Diagrama:
Corrida:
inicio
mientras (op<>6)
{
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()
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
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.
**#include <stdio.h>**
#include <conio.h>
#include <string.h>
#include <iomanip.h>
#include <iostream.h>
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<9;i++)
{
Pila[i]=0;
strcpy(Pila1[i],Nulo);
}
}
void Pop(void)
{
if(Top!=-1)
{
cout<<"Sacando el Dato: "<<Pila[Top];
Top--;
}
else
cout<<"Pila Vacia... Imposible Eliminar"<<endl;
}
void Recorrido(void)
{
if(Top!=-1)
for(int i=Top;i!=-1;i--)
cout<<Pila[i]<<endl;
else
cout<<"Pila Vacia...";
}
main()
{
int res,op=0;
while(op!=6)
{
clrscr();
cout<<"\n1) Recorrido\n2) Busqueda\n3) Push\n4) Pop\n5) Eliminar un Dato\n6)
Salir"<<endl;
gotoxy(1,1);
cout<<"Que deseas hacer?: ";
cin>>op;
gotoxy(1,10);
switch (op)
{
case 1:
tec.Recorrido();
break;
case 2:
cout<<"Que Numero deseas buscar?"<<endl;
cin>>res;
tec.Busqueda(res);
break;
Module Module1
End Module
---------------------------------------------------------------------------------------------------------------------------
End Module
import java.io.Serializable;
public Pila ()
{
super();
}