Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Pilas.
Profesor:
Naudy Albornoz. Estudiante:
Ariana Kochmann.
Materia:
Procesamiento De Datos.
Carrera:
Informática.
Pilas:
Estas pilas se componen de nodos o elementos que contienen los datos a almacenar, y
se utilizan en numerosos algoritmos y programas para llevar a cabo un seguimiento
ordenado de las operaciones realizadas en un determinado proceso, permitiendo tanto el
apilamiento de nuevos elementos como la eliminación de los últimos ingresados.
Estructura de datos: Las pilas son una estructura de datos en la que los elementos se
agregan y eliminan siguiendo una regla conocida como "last-in, first-out" (LIFO), lo
que significa que el último elemento agregado es el primero en ser eliminado.
Capacidad limitada: Una pila puede tener una capacidad limitada, es decir, solo puede
contener un número máximo de elementos determinado. Si se intenta agregar un
elemento adicional cuando la pila está llena, se produce un error conocido como
desbordamiento de pila.
Implementación mediante arrays o listas enlazadas: Una pila puede ser implementada
utilizando un array o una lista enlazada. En un array, los elementos se almacenan en
posiciones consecutivas de memoria y se utiliza un puntero para mantener seguimiento
de la posición de la parte superior de la pila. En una lista enlazada, cada elemento de la
pila contiene un valor y un enlace al siguiente elemento de la pila.
Una pila es una estructura de datos que sigue el principio de LIFO (Last In, First
Out), es decir, el último elemento que se añade es el primero en ser eliminado.
En la representación de las pilas, los elementos se añaden y se eliminan solo por un
extremo llamado "tope". Cuando se añade un elemento a la pila, se coloca en el tope, y
cuando se elimina un elemento, se retira también del tope.
En una pila en modo FIFO, el primer elemento que se añade a la pila es también el
primero en ser eliminado. Esto significa que los elementos se agregan al final de la pila
y se eliminan del principio. Es similar a una cola en la que el primer elemento en llegar
es el primero en ser atendido. Este tipo de pila se utiliza en situaciones donde se
requiere que los elementos se procesen en el orden en que llegaron.
Por otro lado, una pila en modo LIFO funciona de manera opuesta. El último
elemento que se añade a la pila es el primero en ser eliminado. Esto significa que los
elementos se agregan y eliminan del mismo extremo de la pila. Es similar a una pila de
platos, donde el último plato que se colocó es el primero en ser retirado. Este tipo de
pila se utiliza en situaciones donde el orden de procesamiento no importa y se prioriza
el acceso al último elemento añadido.
Algunas operaciones típicas que se pueden realizar con estructuras de pilas son:
Push: Agregar un elemento a la parte superior de la pila. Ejemplo: class
Pila:
def init
(self):
self.items =
[]
def esta_vacia(self):
return self.items ==
[]
# Agregar elementos a la
pila pila.push("manzana")
pila.push("banana")
pila.push("cereza")
En este código, hemos definido una clase Pila que tiene un método push. Este método
toma un elemento como argumento y lo agrega al final de la lista self.items, que
representa nuestra pila. Así es como se implementa la operación push en una pila.
def esta_vacia(self):
return self.items ==
[]
En este código, hemos definido una clase Pila que tiene un método pop. Este método
verifica si la pila está vacía y, si no lo está, quita el último elemento de la lista
self.items, que representa nuestra pila. Así es como se implementa la operación pop en
una pila.
Peek: Retornar el elemento que está en la parte superior de la pila sin eliminarlo. Ejemplo:
class Pila:
def init
(self):
self.items =
[]
def esta_vacia(self):
return self.items ==
[]
def pop(self):
if not
self.esta_vacia():
return
self.items.pop()
def peek(self):
if not
self.esta_vacia():
return self.items[-
1]
# Agregar elementos a la
pila pila.push("manzana")
pila.push("banana")
pila.push("cereza")
En este código, hemos definido una clase Pila que tiene un método peek. Este método
verifica si la pila está vacía y, si no lo está, devuelve el último elemento de la lista
self.items, que representa nuestra pila, sin quitarlo. Así es como se implementa la
operación peek en una pila.
def esta_vacia(self):
return self.items ==
[]
def pop(self):
if not
self.esta_vacia():
return
self.items.pop()
def peek(self):
if not
self.esta_vacia():
return self.items[-
1]
# Crear una pila
pila = Pila()
# Agregar elementos a la
pila pila.push("manzana")
pila.push("banana")
pila.push("cereza")
# Verificar si la pila está vacía después de agregar elementos
print(pila.esta_vacia()) # Debería imprimir: False
isFull: Verificar si la pila está llena (en el caso de implementar una pila con tamaño
fijo). Ejemplo:
#include <stdio.h>
#define
MAX_SIZE 10
typedef struct {
int
items[MAX_SIZE]
; int top;
} Stack;
void initialize(Stack
*s) { s->top = -1;
}
int main() {
Stack myStack;
initialize(&myStack);
if(isFull(&myStack)) {
printf("La pila está llena.\n");
} else {
printf("La pila no está llena.\n");
}
return 0;
}
En este código, la pila tiene un tamaño máximo de 10. La función isFull verifica si el
índice del elemento superior de la pila (top) es igual a MAX_SIZE - 1, lo que indicaría
que la pila está llena. Si es así, la función devuelve 1 (verdadero); si no, devuelve 0
(falso).
def esta_vacia(self):
return self.items ==
[]
def pop(self):
if not
self.esta_vacia():
return
self.items.pop()
def peek(self):
if not
self.esta_vacia():
return self.items[-
1]
def size(self):
return len(self.items)
# Agregar elementos a la
pila pila.push("manzana")
pila.push("banana")
pila.push("cereza")
En este código, hemos definido una clase Pila que tiene un método size. Este método
devuelve el número de elementos en la pila, que es igual a la longitud de la lista
self.items que representa nuestra pila. Así es como se implementa la operación size en
una pila.
def esta_vacia(self):
return self.items ==
[]
def pop(self):
if not
self.esta_vacia():
return
self.items.pop()
def peek(self):
if not
self.esta_vacia():
return self.items[-
1]
def size(self):
return len(self.items)
def clear(self):
self.items = []
# Agregar elementos a la
pila pila.push("manzana")
pila.push("banana")
pila.push("cereza")
# Limpiar la pila
pila.clear()
# Verificar si la pila está vacía después de limpiarla
print(pila.esta_vacia()) # Debería imprimir: True
En este código, hemos definido una clase Pila que tiene un método clear. Este
método vacía la pila al reasignar self.items a una lista vacía. Así es como se
implementa la operación clear en una pila.
def esta_vacia(self):
return self.items ==
[]
def pop(self):
if not
self.esta_vacia():
return
self.items.pop()
def peek(self):
if not
self.esta_vacia():
return self.items[-
1]
def size(self):
return len(self.items)
def clear(self):
self.items =
[]
def imprimir(self):
for item in reversed(self.items):
print(item)
# Agregar elementos a la
pila pila.push("manzana")
pila.push("banana")
pila.push("cereza")
# Imprimir la pila
pila.imprimir() # Debería imprimir: cereza, banana, manzana
En este código, hemos definido una clase Pila que tiene un método imprimir. Este
método recorre la lista self.items (que representa nuestra pila) en orden inverso (desde
el último elemento hasta el primero) e imprime cada elemento. Así es como se
implementa la operación imprimir en una pila.
Algunos algoritmos básicos para el manejo de pilas en Python son los siguientes:
def esta_vacia(self):
return self.items ==
[]
def eliminar(self):
return self.items.pop()
def ver_cima(self):
return self.items[len(self.items)-1]
def tamano(self):
return
len(self.items)
# Agregar elementos
pila.agregar("a")
pila.agregar("b")
pila.agregar("c")
# Eliminar elementos
print(pila.eliminar()) # "c"
print(pila.eliminar()) # "b"