Subido por Jose Luis Choque Gutierrez

pilaDefi 12022

Anuncio
UNIVERSIDAD MAYOR DE “SAN ANDRES”
CARRERA DE INFORMATICA
ESTRUCTURA DE DATOS Y ALGORITMOS
PILAS
RESPONSABLE: LIC. VICTORIA HURTADO CERRUTO
GESTION:1/2022
PILAS
1 INTRODUCCIÓN
El presente capítulo proporciona conceptos fundamentales de pilas la cual es
categorizada como estructura de datos lineal con operaciones propias que las distinguen
de manera precisa en tal sentido definiremos la respectiva clase.
2 PILA
“Una pila es una estructura de datos en la cual el acceso está limitado al elemento más
recientemente insertado” [7]. En sí, se puede insertar o eliminar elementos únicamente
por un extremo(tope). Esto hace que los elementos de la pila sean eliminados en un
orden inverso al que se insertaron. Así también, se afirma que una pila es una estructura
del tipo LIFO (Last Input First Output), lo cual significa que el ultimo en ingresar será
el primero en salir. Asimismo hay autores quieren afirman que las pilas pertenecen al
grupo de estructuras de datos lineales puesto que sus elementos ocupan lugares
sucesivos en la estructura” [10]. En la Figura No. 1 se pueden observar algunos
ejemplos de pilas.
Figura No. 1. Ejemplos de Pilas a) Pila de Archivadores b) Pila de CD’s y c) Pila de
Platos
a)
b)
c)
2.1REPRESENTACIÓN GRÁFICA DE UNA PILA
Las pilas pueden implementarse mediante el uso de:
 Arreglos
 Listas enlazadas
2.1.1 PILA EN UN VECTOR
La representación gráfica depilas en vectores se muestra en la Figura No. 2. Donde el
primer elemento de la pila ‘H’ ocupa la posición 1, el segundo elemento de la pila ‘O’
ocupa la posición 2 y así sucesivamente.
UNIVERSIDAD MAYOR DE “SAN ANDRES”
CARRERA DE INFORMATICA
ESTRUCTURA DE DATOS Y ALGORITMOS
PILAS
RESPONSABLE: LIC. VICTORIA HURTADO CERRUTO
GESTION:1/2022
Figura No 2. Representación de la Pila Z con 4 elementos
v
6
5
4
3
2
1
max
A
L
O
H
tope
Z
Donde:
max define la capacidad máxima del vector.
tope denota el extremo por donde se opera la pila.
v[]vector donde se almacena los elementos de la pila.
En sí, la variable tope no solo permite el tratamiento de la pila por un solo extremo, sino
también proporciona el número de elementos que dicha pila.
4.2.1.2 PILA EN UNA LISTA ENLAZADA
Las pilas pueden implementarse también estructuras dinámicas como listas enlazadas
(Capitulo 8). Tal como muestra el ejemplo de la Figura No. 3
Figura No. 3 Pila H en listas enlazadas
H
p
H
O
L
A
Donde:
p
representa el tope por donde se manipula a la pila
Es oportuno hacer notar que en el presente libro implementaremos pilas en vectores.
4.2.2OPERACIONES EN UNA PILA
Entre las operaciones básicas de una pila se tienen:
 Adicionar un elemento (push) (ver Figura No. 4)
Figura No. 4. Adiciona el elemento S a la Pila Z
v
S
6
5
4
3
2
1
Z
max
S
A
L
O
H
tope
UNIVERSIDAD MAYOR DE “SAN ANDRES”
CARRERA DE INFORMATICA
ESTRUCTURA DE DATOS Y ALGORITMOS
PILAS
RESPONSABLE: LIC. VICTORIA HURTADO CERRUTO
GESTION:1/2022
Eliminar un elemento (pop) (ver Figura No. 5)
Figura No. 5. Elimina el elemento S de la Pila Z
v
Z
6
5
4
3
max
A
L
2
O
1
H
tope
2.3 ESTADOS ADICIONALES DE UNA PILA
Reflejan los distintos momentos de una pila: inicial (ver Figura No. 6), llena (ver Figura
No. 7 y vacía (ver Figura No. 8).
 Estado inicial
Figura No. 6. Estado inicial de la Pila Z
v
Z
6
5
4
3
2
1
tope=0
max
 Pila llena
Figura No.7. Pila Q llena
v
Q
6
5
4
3
2
1
F
N
A
L
O
H
max
 Pila vacía
Figura No. 8. Pila R vacía
v
6
5
4
3
2
1
R
max
tope=0
2.5 DEFINICION DE LA CLASE PILA
Considerando la representación de las pilas en arreglos definimos la clase Pila
representada gráficamente por el diagrama de clase que se muestra en la Figura 9.
UNIVERSIDAD MAYOR DE “SAN ANDRES”
CARRERA DE INFORMATICA
ESTRUCTURA DE DATOS Y ALGORITMOS
PILAS
RESPONSABLE: LIC. VICTORIA HURTADO CERRUTO
GESTION:1/2022
Diagrama de clase que contiene atributos tales como la capacidad de la pila (max),
además del puntero (tope) que define a la pila en sí, además se define el arreglo donde
se almacena los elementos de la pila (v[]).
Con el objeto de construir código que sea independiente del tipo de datos se decide que
la clase Pila sea una clase genérica razón por la que los elementos de la pila son
definidos de tipo Object lo que posibilita que tales elementos sean de distintos tipos:
enteros, reales, caracteres, cadenas, etc.
Figura No. 9 Definición de la clase Pila
Pila
private: int tope,max
Object v[100]
Pila(int cp)
void adicionar(Object ele)
Object eliminar()
boolean esLLena()
boolean esVacia()
void mostrar()
int nElem()
void vaciar(Pila B)
…
Finalmente, con el propósito de completar la implementación del TAD Pila a
continuación se proporciona el código fuente en Java.
IMPLEMENTACIÓN DEL TDA Pila
package Pila;
public class Pila {
private int tope,max;
Object v[]=new Object[100];
Pila(int cp)
{tope=0;max=cp;}
boolean esLlena()
{if(tope==max) return true;
else return false;
}
boolean esVacia()
{
if(tope==0) return true;
else return false;
}
void adicionar(Object ele)
{
if(!esLlena()) {tope++;v[tope]=ele;}
else System.out.println("Pila llena");
}
Object eliminar()
{Object dato;
if(!esVacia()) {dato=v[tope];tope=tope-1;}
UNIVERSIDAD MAYOR DE “SAN ANDRES”
CARRERA DE INFORMATICA
ESTRUCTURA DE DATOS Y ALGORITMOS
PILAS
RESPONSABLE: LIC. VICTORIA HURTADO CERRUTO
GESTION:1/2022
else {System.out.print("Pila vacia");dato=null;}
return dato;
}
void mostrar()
{ Pila aux=new Pila(max);
Object ele;
while(!esVacia())
aux.adicionar(eliminar());
while(!aux.esVacia())
{
ele=aux.eliminar();
System.out.print(ele);
adicionar(ele);
}
}
void mostrarCD()
{ Pila aux=new Pila(max);
CD ele;
while(!esVacia())
aux.adicionar(eliminar());
while(!aux.esVacia())
{
ele=(CD)aux.eliminar();
ele.mostrar();System.out.println();
adicionar((Object)ele);
}
}
int nElem()
{return tope;}
void vaciar(Pila B)
{
while(!B.esVacia())
adicionar(B.eliminar());
}
}
2.6 PILAS EN JAVA
El presente texto ha proporcionado conceptos fundamentales sobre pilas,
construyéndose la clase y métodos respectivos. Sin embargo con el propósito de aplicar
la propiedad de reutilización que tiene la programación orientada a objetos a
continuación se describe a la clase Stack(Pila) que se incorpora en Java como parte de
su paquete de utilidades java.util. En sí, la clase Stack extiende la clase Vector del
Java y es una de las posibilidades para implementar la estructura de datos pila y que
entre sus métodos importantes se tienen:

Método push(). Permite adicionar el elemento ítem en la pila.
Formato:
push(tipo ítem)

Método pop(). Permite sacar el elemento de la pila que está en el tope.
Formato:
UNIVERSIDAD MAYOR DE “SAN ANDRES”
CARRERA DE INFORMATICA
ESTRUCTURA DE DATOS Y ALGORITMOS
PILAS
RESPONSABLE: LIC. VICTORIA HURTADO CERRUTO
GESTION:1/2022
tipo pop()

Método peek(). Permite mostrar el elemento del tope de la pila
Formato:
tipo peek()

Método int search(tipo ítem).Permite determinar si ítem está en la pila, en tal caso
devuelve la posición del ítem en la pila. El elemento del tope ocupa la posición 1 si
el elemento no se encuentra en la pila devuelve -1.
Formato:
boolean search(tipo ítem)

Método empty(). Permite verificar si una pila está vacía. Devuelve true si la pila
está vacía y false si no está vacía.
Formato:
boolean empty()
2.7 APLICACIONES
Las pilas son estructuras de datos que se utilizan en diversos tipos de problemas:

En los compiladores (parsers: reconocedores sintácticos de los compiladores).

Tratamiento de expresiones aritméticas. Previamente es conveniente recordar
ciertos conceptos relacionados a la representación de expresiones las cuales pueden
representarse de tres modos ver Tabla No.1.
Tabla No. 1 Tipos de notaciones de expresiones aritméticas
Expresión Tipo
Descripción
A+B
AB+
+AB
Infija
Posfija
Prefija
Porque el operador (+) está entre los operandos A y B.
Porque el operador (+) esta después de los operandos A y B
Porque el operador (+) esta antes de los operandos A y B
Muchos autores afirman que la ventaja de utilizar expresiones en notación posfija o
prefija radica en que no son necesarios los paréntesis para reflejar el orden de operación
pues este queda establecido por la ubicación de los operadores respecto de los
operandos.
Por otro lado, también menciona que para convertir una expresión en notación infija en
su correspondiente expresión en notación posfija o prefija deberán cumplirse algunas
condiciones (ver Problema No. 2):

Identificar operadores a manejar (según prioridad)

Los operadores de más alta prioridad se ejecutan primero.
UNIVERSIDAD MAYOR DE “SAN ANDRES”
CARRERA DE INFORMATICA
ESTRUCTURA DE DATOS Y ALGORITMOS
PILAS
RESPONSABLE: LIC. VICTORIA HURTADO CERRUTO



GESTION:1/2022
Los paréntesis tendrán más prioridad que cualquier operador.
Llamadas a subprogramas. En este caso la aplicación de pilas permiten:

Guardar la dirección del programa (subprograma) desde donde se hizo la
llamada a otros subprogramas para regresar y seguir ejecutándolo.

Permiten guardar el estado de las variables en el momento que se hace la
llamada, para poder seguir ocupándolas al regresar del subprograma.
Recursión, Se refiere a la utilización de pilas en procesos recursivos
Descargar