Documentos de Académico
Documentos de Profesional
Documentos de Cultura
El término "pila" (stack en inglés) se refiere a una estructura de datos lineal que sigue el
principio de LIFO (Last In, First Out), es decir, el último elemento en entrar es el primero en
salir. Funciona de manera similar a una pila de platos: puedes agregar o quitar elementos
solo desde el tope de la pila, generalmente admite dos operaciones principales:
Además de estas operaciones básicas, también es común tener operaciones como "peek"
que permiten ver el elemento en la parte superior de la pila sin eliminarlo, y "isEmpty" para
verificar si la pila está vacía.
Las pilas son utilizadas en una variedad de aplicaciones informáticas, incluyendo la gestión
de llamadas de funciones en la memoria durante la ejecución de programas, la evaluación
de expresiones matemáticas, el seguimiento de historiales en navegadores web y la
implementación de algoritmos como la inversión de cadenas o la resolución de problemas
de laberintos, entre otros.
Características
1. LIFO (Last In, First Out): La característica fundamental de una pila es su principio de
funcionamiento. El último elemento que se inserta en la pila es el primero en ser
eliminado.
2. Operaciones limitadas: Las operaciones principales en una pila suelen ser push (agregar
un elemento) y pop (eliminar un elemento). Estas operaciones están restringidas a trabajar
solo en el extremo superior de la pila.
3. Estructura de datos simple: Las pilas son estructuras de datos simples y eficientes,
generalmente implementadas como estructuras de arrays o listas en los lenguajes de
programación.
5. Eficiencia en tiempo constante: Las operaciones push y pop en una pila suelen tener una
complejidad temporal constante, lo que significa que su rendimiento no depende del
tamaño total de la pila.
Representación
Las pilas pueden representarse de varias formas en la programación, siendo las más comunes:
class Stack:
def __init__(self, capacity):
self.capacity = capacity
self.array = [None] * capacity
self.top = -1
def pop(self):
if self.top == -1:
print("Stack Underflow")
return None
item = self.array[self.top]
self.top -= 1
return item
class Node:
def __init__(self, data):
self.data = data
self.next = None
class Stack:
def __init__(self):
self.top = None
def pop(self):
if self.is_empty():
print("Stack Underflow")
return None
item = self.top.data
self.top = self.top.next
return item
def is_empty(self):
return self.top is None
Métodos para modificar el
comportamiento de una pila:
Tratar una pila en modo FIFO:
1. Implementar una cola usando dos pilas: utilizar dos pilas para simular el comportamiento
de una cola. Los elementos se agregan a una pila (pila de entrada) y luego se eliminan de
otra pila (pila de salida). Cuando la pila de salida está vacía y se necesita eliminar un
elemento, puedes transferir todos los elementos de la pila de entrada a la pila de salida y
luego eliminar el elemento superior de la pila de salida.
2. Implementar una cola usando una pila: También es posible implementar una cola
utilizando solo una pila. Esto se puede lograr mediante la reversión de los elementos de la
pila temporalmente cuando necesitas eliminar un elemento. Después de eliminar el
elemento, puedes revertir los elementos nuevamente para mantener el orden original.
class QueueUsingStack:
def __init__(self):
self.stack_in = []
self.stack_out = []
def dequeue(self):
if not self.stack_out:
if not self.stack_in:
print("Queue is empty")
return None
while self.stack_in:
self.stack_out.append(self.stack_in.pop())
return self.stack_out.pop()
queue = QueueUsingStack()
queue.enqueue(1)
queue.enqueue(2)
queue.enqueue(3)
print(queue.dequeue())
print(queue.dequeue())
El modo LIFO (Last In, First Out) es el comportamiento natural de una pila, donde el último
elemento que se inserta es el primero en ser eliminado.
class Stack:
def __init__(self):
self.items = []
def pop(self):
if not self.is_empty():
return self.items.pop()
else:
print("Stack is empty")
return None
def peek(self):
if not self.is_empty():
return self.items[-1]
else:
print("Stack is empty")
return None
def is_empty(self):
return len(self.items) == 0
def size(self):
return len(self.items)
stack = Stack()
stack.push(1)
stack.push(2)
stack.push(3)
print("Pop:", stack.pop())
print("Pop:", stack.pop())