leccion 3.1 pilas

Upload: idsystems

Post on 10-Apr-2018

217 views

Category:

Documents


0 download

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