REPÚBLICA BOLIVARIANA DE VENEZUELA
   MINISTERIO DE EDUCACIÓN SUPERIOR
 UNIVERSIDAD BOLIVARIANA DE VENEZUELA
              SEDE: FALCÓN
PFG: INFORMÁTICA PARA LA GESTIÓN SOCIAL
   U.C: PROG. Y ESTRUCTURA DE DATOS.
    PROFESORA: LIC. BEATRIZ BARRIOS




            Pilas


          Punto Fijo, junio de 2006
Concepto de Pila
      Es un tipo especial de lista lineal en la que la
inserción y borrado de elementos se realiza sólo por un
extremo que se denomina cima o tope.


      Es una estructura con numerosas analogías en
la vida real: una pila de platos, una pila de libros, una
pila de monedas, entre otras.
Ejemplo 1:

                          Agregar un nuevo                 Eliminar un
                              elemento                      elemento



            a
         vel ia                                Novela        Cima
       No ed
               op
       c  i cl
     En          ar i
                      o
             ion                         Enciclopedia
         cc
      Di

                                             Diccionario
                                                            Fondo

Aplicaciones                                  
                                                  5+2 – (3+4)




   Los editores de texto proporcionan normalmente un
    botón deshacer que cancela las operaciones de
    edición recientes y restablece el estado anterior del
    documento. La secuencia de operaciones recientes
    se mantiene en una Pila.


   Los navegadores permiten habitualmente volver
    hacia atrás en la secuencia de páginas visitadas.
    Las direcciones de los sitios visitados se almacenan
    en una Pila.
Operaciones Básicas de Manipulación
            Apilar: Añade un nuevo elemento a la pila, el cual se ubicará en la cima de
             pila.
            Desapilar: Elimina un elemento situado en la cima de la Pila. Luego de
             desapilar existirá una nueva cima.
            Inicializar Pila: Inicia la pila como vacía.
            Pila Vacía: Comprobar si la pila no tiene elementos.
            Pila Llena: Comprobar si la pila está llena de elementos. Si se encuentra
             llena no se pueden apilar nuevos elementos.
            Cima: Obtiene el elemento cima de la pila.
                      APILAR          APILAR         APILAR        DESAPILAR        APILAR




                                                      CIMA    E3                    CIMA     E4

Pila Vacía                             CIMA    E2             E2     CIMA      E2            E2

                       CIMA     E1             E1             E1               E1            E1
El tipo Pila implementado con Arrays.
         Una Pila se puede implementar mediante arrays o mediante listas
enlazadas. Una implementación estática se realiza utilizando un array de
tamaño fijo y una implementación dinámica mediante una lista enlazada.

          El tipo Pila implementado con arrays incluye una lista (array) y un
índice a la cima de la Pila; además, una constante con el máximo número de
elementos. Al utilizar un array para contener los elementos de la pila hay que
tener en cuenta que el tamaño de la pila no puede exceder el número de
elementos del array, y la condición pila llena será significativa para el diseño.

Ejemplo 2: Una pila de 6 elementos se puede representar gráficamente así:
                                     Cima



                             0   1     2    3     4    5

                   Pila vacía:                        Pila llena:
                                     Puntero de
                   puntero de                         puntero de
                                       la Pila
                   la pila=-1                          a pila=5
El tipo Pila implementado con Arrays.
(Cont...)
         Si se almacenan los datos A, B, C, . . . , en la Pila se puede representar
gráficamente de alguna de estas formas:

                                                A    B     C   ...

    Cima = 2     C
                 B                              Índice
                 A

     La Pila en función de diferentes situaciones de un posible programa.
                      Pila vacía
                                                         ...
                      Cima=-1
                      Insertar 50
                                      50                 ...
                      Cima=-0
                      Insertar 25
                                      50   25            ...
                      Cima= 1

                      Quitar (Cima)   50
                      Cima=-0
El tipo Pila implementado con Arrays.
(Cont...)

                        Declaración
Sintaxis:                               Ejemplo:
#define TAMPILA 100
                                        #define TAMPILA 100
Tipo de dato Nombre Vector [TAMPILA];
                                        int pila [TAMPILA];
Int cima;
                                        int cima;
El tipo Pila implementado con Arrays.
(Cont...)
   Implementación de las operaciones
Apilar:
Incrementa la cima de la Pila en 1 y asigna el nuevo elemento a la
lista de la Pila. Cualquier intento de añadir un elemento en una
pila llena produce un mensaje de error de desbordamiento pila y
debe terminar el programa.
                      void apilar ( int n )
                      {
                         if ( pilallena() = = true )
                            cout<< “Pila LLena”;
                         else
                         {
                            cima + +;
                            pila[cima]=n;
                         }
                       }
El tipo Pila implementado con Arrays.
(Cont...)
    Implementación de las operaciones
Desapilar:
Copia primero el valor de cima de la Pila en una variable local auxiliar, y a
continuación decrementa la cima de la Pila en 1. El objetivo de la
operación es retirar el elemento cima, no obstante la función devuelve la
variable auxiliar para que pueda sr utilizada. Si se intenta eliminar o borrar
un elemento en una pila vacía se debe producir un mensaje de error y
terminar.                 int desapilar ( void )
                          {
                           int aux;
                            if ( pilavacia() = = true )
                               cout<< “Pila Vacia”;
                            else
                            {
                               aux=pila[cima];
                               cima- -;
                               return aux;
                            }
                          }
El tipo Pila implementado con
Arrays. (Cont...)
   Implementación de las operaciones
Cima:
Devuelve el elemento que se encuentra en la cima de la Pila: no se
modifica la Pila.


                      int cima ( void )
                      {
                       return pila[cima];
                      }
El tipo Pila implementado con
Arrays. (Cont...)
Operaciones de verificación del estado de la Pila
Pila Vacía:
Verifica se la cima de la Pila es -1. En ese caso, la pila está vacía y se
devuelve un 1 (verdadero), en caso contrario, devuelve ceo (falso).


                        int pilavacia ( void )
                        {
                          if ( cima==-1 )
                             return 1;
                          else
                             return 0;
                        }
El tipo Pila implementado con
Arrays. (Cont...)
Operaciones de verificación del estado de la Pila
Pila Llena:
Verifica si la cima es TAMPILA-1. En ese caso la pila está llena y se
devuelve un 1 (verdadero) en caso contrario, se devuelve 0 (falso).


                       int pilallena ( void )
                       {
                         if ( cima==TAMPILA-1 )
                            return 1;
                         else
                            return 0;
                       }
El tipo Pila implementado con
Arrays. (Cont...)
Operaciones de verificación del estado de la Pila
Inicializar Pila:
Vacía íntegramente la Pila, para lo que pone cima al valor que se
corresponda con Pila Vacía (-1).


                     void inicializarpila ( void )
                     {
                       cima=-1;
                     }
Ejercicio 1.
Escribir un programa que cree una pila de enteros y realice
operaciones de apilar y desapilar,


Desarrolle un programa que permita conocer si una pila está llena o
está vacía


Desarrolle un programa que permita calcular el cuadrado de los
elementos de una pila y guardar los resultados en una segunda pila

Pilas

  • 1.
    REPÚBLICA BOLIVARIANA DEVENEZUELA MINISTERIO DE EDUCACIÓN SUPERIOR UNIVERSIDAD BOLIVARIANA DE VENEZUELA SEDE: FALCÓN PFG: INFORMÁTICA PARA LA GESTIÓN SOCIAL U.C: PROG. Y ESTRUCTURA DE DATOS. PROFESORA: LIC. BEATRIZ BARRIOS Pilas Punto Fijo, junio de 2006
  • 2.
    Concepto de Pila Es un tipo especial de lista lineal en la que la inserción y borrado de elementos se realiza sólo por un extremo que se denomina cima o tope. Es una estructura con numerosas analogías en la vida real: una pila de platos, una pila de libros, una pila de monedas, entre otras.
  • 3.
    Ejemplo 1: Agregar un nuevo Eliminar un elemento elemento a vel ia Novela Cima No ed op c i cl En ar i o ion Enciclopedia cc Di Diccionario Fondo
  • 4.
     Aplicaciones  5+2 – (3+4)  Los editores de texto proporcionan normalmente un botón deshacer que cancela las operaciones de edición recientes y restablece el estado anterior del documento. La secuencia de operaciones recientes se mantiene en una Pila.  Los navegadores permiten habitualmente volver hacia atrás en la secuencia de páginas visitadas. Las direcciones de los sitios visitados se almacenan en una Pila.
  • 5.
    Operaciones Básicas deManipulación  Apilar: Añade un nuevo elemento a la pila, el cual se ubicará en la cima de pila.  Desapilar: Elimina un elemento situado en la cima de la Pila. Luego de desapilar existirá una nueva cima.  Inicializar Pila: Inicia la pila como vacía.  Pila Vacía: Comprobar si la pila no tiene elementos.  Pila Llena: Comprobar si la pila está llena de elementos. Si se encuentra llena no se pueden apilar nuevos elementos.  Cima: Obtiene el elemento cima de la pila. APILAR APILAR APILAR DESAPILAR APILAR CIMA E3 CIMA E4 Pila Vacía CIMA E2 E2 CIMA E2 E2 CIMA E1 E1 E1 E1 E1
  • 6.
    El tipo Pilaimplementado con Arrays. Una Pila se puede implementar mediante arrays o mediante listas enlazadas. Una implementación estática se realiza utilizando un array de tamaño fijo y una implementación dinámica mediante una lista enlazada. El tipo Pila implementado con arrays incluye una lista (array) y un índice a la cima de la Pila; además, una constante con el máximo número de elementos. Al utilizar un array para contener los elementos de la pila hay que tener en cuenta que el tamaño de la pila no puede exceder el número de elementos del array, y la condición pila llena será significativa para el diseño. Ejemplo 2: Una pila de 6 elementos se puede representar gráficamente así: Cima 0 1 2 3 4 5 Pila vacía: Pila llena: Puntero de puntero de puntero de la Pila la pila=-1 a pila=5
  • 7.
    El tipo Pilaimplementado con Arrays. (Cont...) Si se almacenan los datos A, B, C, . . . , en la Pila se puede representar gráficamente de alguna de estas formas: A B C ... Cima = 2 C B Índice A La Pila en función de diferentes situaciones de un posible programa. Pila vacía ... Cima=-1 Insertar 50 50 ... Cima=-0 Insertar 25 50 25 ... Cima= 1 Quitar (Cima) 50 Cima=-0
  • 8.
    El tipo Pilaimplementado con Arrays. (Cont...) Declaración Sintaxis: Ejemplo: #define TAMPILA 100 #define TAMPILA 100 Tipo de dato Nombre Vector [TAMPILA]; int pila [TAMPILA]; Int cima; int cima;
  • 9.
    El tipo Pilaimplementado con Arrays. (Cont...) Implementación de las operaciones Apilar: Incrementa la cima de la Pila en 1 y asigna el nuevo elemento a la lista de la Pila. Cualquier intento de añadir un elemento en una pila llena produce un mensaje de error de desbordamiento pila y debe terminar el programa. void apilar ( int n ) { if ( pilallena() = = true ) cout<< “Pila LLena”; else { cima + +; pila[cima]=n; } }
  • 10.
    El tipo Pilaimplementado con Arrays. (Cont...) Implementación de las operaciones Desapilar: Copia primero el valor de cima de la Pila en una variable local auxiliar, y a continuación decrementa la cima de la Pila en 1. El objetivo de la operación es retirar el elemento cima, no obstante la función devuelve la variable auxiliar para que pueda sr utilizada. Si se intenta eliminar o borrar un elemento en una pila vacía se debe producir un mensaje de error y terminar. int desapilar ( void ) { int aux; if ( pilavacia() = = true ) cout<< “Pila Vacia”; else { aux=pila[cima]; cima- -; return aux; } }
  • 11.
    El tipo Pilaimplementado con Arrays. (Cont...) Implementación de las operaciones Cima: Devuelve el elemento que se encuentra en la cima de la Pila: no se modifica la Pila. int cima ( void ) { return pila[cima]; }
  • 12.
    El tipo Pilaimplementado con Arrays. (Cont...) Operaciones de verificación del estado de la Pila Pila Vacía: Verifica se la cima de la Pila es -1. En ese caso, la pila está vacía y se devuelve un 1 (verdadero), en caso contrario, devuelve ceo (falso). int pilavacia ( void ) { if ( cima==-1 ) return 1; else return 0; }
  • 13.
    El tipo Pilaimplementado con Arrays. (Cont...) Operaciones de verificación del estado de la Pila Pila Llena: Verifica si la cima es TAMPILA-1. En ese caso la pila está llena y se devuelve un 1 (verdadero) en caso contrario, se devuelve 0 (falso). int pilallena ( void ) { if ( cima==TAMPILA-1 ) return 1; else return 0; }
  • 14.
    El tipo Pilaimplementado con Arrays. (Cont...) Operaciones de verificación del estado de la Pila Inicializar Pila: Vacía íntegramente la Pila, para lo que pone cima al valor que se corresponda con Pila Vacía (-1). void inicializarpila ( void ) { cima=-1; }
  • 15.
    Ejercicio 1. Escribir unprograma que cree una pila de enteros y realice operaciones de apilar y desapilar, Desarrolle un programa que permita conocer si una pila está llena o está vacía Desarrolle un programa que permita calcular el cuadrado de los elementos de una pila y guardar los resultados en una segunda pila