1. República Bolivariana de Venezuela
Instituto Universitario de Tecnología
“Antonio José de Sucre”
Anaco, Estado Anzoátegui
Cátedra: Procesamiento de datos
Carrera: Informática
DECLARACIÓN DE PILAS
Bachiller:
Daniel Castro
C.I 31556482
Docente:
Naudy Albornoz
Anaco, febrero 2024
2. Pila: Una pila es una estructura de datos que permite agregar y eliminar elementos
en un extremo, conocido como el tope de la pila. Se trata de un objeto dinámico
que está constantemente cambiando. En la definición de pila, se establece que
solo un extremo, llamado tope, se utiliza para realizar operaciones de inserción y
eliminación de elementos.
Características de una Pila:
Las características de una pila son las siguientes:
1. Operaciones básicas: Las operaciones básicas que se pueden realizar en
una pila son push (para agregar un elemento) y pop (para eliminar un
elemento). Además, se puede realizar una operación peek para consultar el
elemento en el tope de la pila sin eliminarlo.
2. Estructura de datos lineal: Una pila es una estructura de datos lineal, ya
que los elementos se organizan de manera secuencial uno detrás del otro.
3. Capacidad limitada: En algunas implementaciones de pilas, la capacidad
puede estar limitada por la memoria disponible. Si se intenta agregar un
elemento cuando la pila está llena, se produce un desbordamiento de pila
(stack overflow).
4. Implementación mediante arreglos o listas enlazadas: Una pila puede ser
implementada utilizando arreglos o listas enlazadas. En el caso de los
arreglos, se reserva un espacio fijo de memoria, mientras que en las listas
enlazadas los elementos se conectan mediante punteros.
5. Eficiencia en tiempo de ejecución: Las operaciones push, pop y peek en
una pila tienen una complejidad temporal de O (1), es decir, su tiempo de
ejecución es constante y no depende del tamaño de la pila.
Representación de Pila:
3. Tratamiento de una pila: Modo fifo, modo lifo.
En una pila, el modo FIFO (First In, First Out) y el modo LIFO (Last In, First Out)
se refieren a la forma en que se gestionan los elementos en la pila.
1. Modo FIFO (First In, First Out):
En el modo FIFO, también conocido como cola, el primer elemento que se inserta
en la pila es el primero en ser eliminado. Es decir, los elementos se eliminan en el
mismo orden en que se insertaron. En una pila con modo FIFO, las operaciones
de inserción se realizan al final de la pila y las operaciones de eliminación se
realizan al principio de la pila.
Ejemplo:
La boletería del cine
Para ir a ver la película "Titanic II, la ira de Rose" hay dos filas de personas.
Un acomodador es el encargado de dejar entrar a la gente. Sus instrucciones
son simples: "deja entrar siempre a la persona que es mayor, si tienen la
misma edad, a gente de la fila 1 tiene preferencia". El siguiente código
muestra el comportamiento del acomodador. Suponemos que las colas
guardan referencias a Personas:
1. while (!vacia(cola1) || !vacia(cola2))
2. {
3. Persona p;
4. if (vacia(c1))
5. p=decolar(p);
6. else
7. if (vacia(c2))
8. p=decolar(c1);
9. else
10. {
11. Persona p1=cabeza(c1);
12. Persona p2=cabeza(c2);
13. if (p1.edad <= p2.edad) p=decolar(c1);
14. else
15. p=decolar(c2);
16. }
17.println ("Se atiende a %s de %d añosn",p.nombre,p.edad);
18.}
4. 2. Modo LIFO (Last In, First Out):
En el modo LIFO, el último elemento que se inserta en la pila es el primero en ser
eliminado. Es decir, los elementos se eliminan en orden inverso al que fueron
insertados. En una pila con modo LIFO, las operaciones de inserción se realizan al
final de la pila y las operaciones de eliminación también se realizan al final de la
pila.
Ejemplo:
Supongamos que una empresa tiene los siguientes registros de inventario para un
producto en particular:
Y que al final del año se vendieron 4500 unidades de este producto.
Para calcular el costo de los bienes vendidos (COGS, por sus siglas en inglés)
utilizando el método LIFO, primero se deben determinar cuáles fueron las últimas
unidades que ingresaron al inventario, es decir, las compradas o producidas más
recientemente.
En este caso, las últimas 4500 unidades compradas son las 3000 unidades
compradas en septiembre, y las 1500 unidades compradas en Junio. que serán
las primeras en salir según el método LIFO. Luego, se debe multiplicar la cantidad
de unidades vendidas por el costo unitario de esas últimas unidades.
Entonces, el costo de los bienes vendidos para este producto utilizando el método
LIFO es:
Septiembre: 3000 x 15= 45.000€
Junio: 1500 x 13= 19.500€
Total: 64.500€ costo de los productos vendidos.
Si se han vendido a 20€, se han facturado: 4.500 x 20=90.000€
Por tanto, son el método LIFO el beneficio es de: 90.000 – 64.500 = 25.500€
Los beneficios con el método FIFO habrían sido diferentes.
Fecha de compra Cantidad Precio unitario
1 de enero 1000 $10
1 de marzo 2000 $12
1 de junio 1500 $13
1 de septiembre 3000 $15
5. Operaciones a realizar con estructura de pila:
Las operaciones básicas que se pueden realizar con una estructura de pila son:
1. Push (Empujar): Inserta un elemento en la parte superior de la pila.
2. Pop (Sacar): Elimina y devuelve el elemento en la parte superior de la pila.
3. Peek (Mirar): Devuelve el elemento en la parte superior de la pila sin eliminarlo.
4. isEmpty (Está vacía): Verifica si la pila está vacía.
5. size (Tamaño): Devuelve la cantidad de elementos en la pila.
Ejemplo:
class Pila:
def __init__(self):
self.items = []
def push(self, elemento):
self.items.append(elemento)
def pop(self):
if not self.isEmpty():
return self.items.pop()
else:
return "La pila está vacía"
def peek(self):
if not self.isEmpty():
return self.items[-1]
else:
return "La pila está vacía"
def isEmpty(self):
return len(self.items) == 0
def size(self):
return len(self.items)
6. # Ejemplo de uso
pila = Pila()
pila.push(1)
pila.push(2)
pila.push(3)
print("Elemento en la parte superior de la pila:", pila.peek()) # Salida: 3
print("Tamaño de la pila:", pila.size()) # Salida: 3
print("Elemento eliminado de la pila:", pila.pop()) # Salida: 3
print("Elemento en la parte superior de la pila:", pila.peek()) # Salida: 2
print("Tamaño de la pila:", pila.size()) # Salida: 2
En este ejemplo, se crea una clase Pila que implementa las operaciones básicas
de una pila. Se insertan elementos en la pila con push, se elimina el elemento en
la parte superior con pop, se obtiene el elemento en la parte superior sin eliminarlo
con peek, se verifica si la pila está vacía con isEmpty y se obtiene el tamaño de la
pila con size.
Algoritmos elementales para el tratamiento de pila.
1. Invertir una pila:
- Crear una pila auxiliar.
- Mientras la pila original no esté vacía, sacar un elemento de la pila original y
apilarlo en la pila auxiliar.
- Una vez que la pila original esté vacía, copiar los elementos de la pila auxiliar
de vuelta a la pila original.
2. Ordenar una pila de forma ascendente:
- Crear una pila auxiliar.
- Mientras la pila original no esté vacía, sacar un elemento de la pila original.
- Si el elemento es mayor que el tope de la pila auxiliar, mover los elementos
mayores de la pila auxiliar a la pila original.
- Apilar el elemento en la posición correcta en la pila auxiliar.
- Copiar los elementos de la pila auxiliar de vuelta a la pila original.
7. 3. Verificar si una expresión con paréntesis está balanceada:
- Recorrer la expresión carácter por carácter.
- Si se encuentra un paréntesis de apertura, apilarlo en una pila.
- Si se encuentra un paréntesis de cierre, verificar si el tope de la pila es un
paréntesis de apertura correspondiente.
- Si coincide, desapilar el paréntesis de apertura. Si no coincide o la pila está
vacía al final, la expresión no está balanceada.