1. República Bolivariana de Venezuela
Instituto Universitario de Tecnología
“Antonio José de Sucre”
Extensión San Felipe
PILAS
AUTOR:
JOSÉ GABRIEL LUCENA
CI:30.840.291
SAN FELIPE
2. Pilas: Definición
Una pila es una estructura de datos lineal que sigue el principio de
"último en entrar, primero en salir" (LIFO, Last In, First Out). En una pila, los
elementos se insertan y eliminan solo en un extremo, conocido como la parte
superior de la pila, esto significa que el último elemento que se añade a la
pila es el primero en ser eliminado.
Las pilas son utilizadas comúnmente en programación para realizar
diversas tareas, como la reversión de cadenas, seguimiento de la ejecución
de funciones y evaluación de expresiones aritméticas.
En resumen, una pila es una estructura de datos que permite el
almacenamiento y recuperación de elementos de manera secuencial,
siguiendo el principio LIFO, es decir, Cada vez que se agrega un elemento a
la pila, este se coloca en la parte superior y cuando se elimina un elemento,
se extrae el que está en la parte superior de la pila.
Características
Las pilas tienen varias características distintivas que las hacen útiles
en diferentes contextos, dentro de las más importantes se encuentran:
1. LIFO (Last In, First Out): Este principio define el comportamiento
fundamental de una pila ya que en una pila el último elemento que se añade
es el primero en ser eliminado.
2. Operaciones básicas: Las operaciones básicas que se pueden
realizar en una pila son:
- Push: Agregar un elemento a la parte superior de la pila.
3. - Pop: Eliminar y devolver el elemento en la parte superior de la pila.
- Peek o top: Obtener el elemento en la parte superior de la pila sin
eliminarlo.
- IsEmpty: Verificar si la pila está vacía.
- Size: Obtener el número de elementos en la pila.
3. Implementación con estructuras de datos: Las pilas suelen
implementarse utilizando arreglos o listas enlazadas, cada implementación
tiene sus propias ventajas y desventajas en términos de eficiencia y
complejidad.
4. Aplicaciones en programación: Las pilas son utilizan en muchos
contextos de programación como la reversión de cadenas, la evaluación de
expresiones aritméticas, el seguimiento de la ejecución de funciones (pilas
de llamadas), la gestión de memoria (pila de llamadas al sistema) y en
algoritmos como DFS (Depth-First Search).
5. Estructura simple y eficiente: Las pilas son estructuras de datos
simples y eficientes que permiten un acceso rápido a los elementos en la
parte superior de la pila, lo que las hace ideales para ciertas tareas
específicas.
Representación
La representación de una pila en programación puede variar
dependiendo de la implementación elegida, ya que las dos implementaciones
más comunes son utilizando arreglos (arrays) o listas enlazadas (linked lists).
Las pilas en cada una de estas estructuras de datos se representan de la
siguiente manera:
4. 1. Pila con arreglo (array):
En esta representación, se utiliza un arreglo para almacenar los
elementos de la pila, se suele tener un puntero que apunta al índice del
elemento en la parte superior de la pila, las operaciones push y pop se
realizan modificando este puntero y actualizando el arreglo en consecuencia.
Una desventaja de esta implementación es que el tamaño del arreglo
debe ser fijo o se debe realizar un reajuste dinámico si la pila crece más allá
de su capacidad actual.
2. Pila con lista enlazada (linked list):
En esta representación, se utiliza una lista enlazada para almacenar
los elementos de la pila, donde cada nodo de la lista contiene un elemento y
un puntero al siguiente nodo.
El nodo en la parte superior de la pila es el primer nodo de la lista y las
operaciones push y pop se realizan añadiendo o eliminando nodos en el
inicio de la lista, respectivamente.
Una ventaja de esta implementación es que no tiene limitaciones de
tamaño fijo y puede crecer dinámicamente según sea necesario.
Tratamiento de una pila: Modo fifo, modo lifo. Ejemplos
El tratamiento de una pila puede realizarse de dos formas diferentes:
1. **Modo FIFO (First In, First Out)**: en la primera forma los
elementos se insertan y se eliminan en el mismo orden en el que fueron
5. agregados a la pila, es similar al comportamiento de una cola (queue) en la
que el primer elemento que se inserta es el primero en ser eliminado.
En una pila tratada en modo FIFO, al hacer un pop, se extrae el
elemento que fue agregado primero (el más antiguo).
2. **Modo LIFO (Last In, First Out)**: en la segunda forma los
elementos se insertan y se eliminan en orden inverso al que fueron
agregados a la pila, es el comportamiento típico de una pila, donde el último
elemento que se inserta es el primero en ser eliminado.
En una pila tratada en modo LIFO, al hacer un pop, se extraerá el
elemento que fue agregado más recientemente (el más nuevo).
La elección del modo FIFO o LIFO dependerá del problema que se
desea resolver y de cómo se necesita acceder y manipular los elementos en
la pila, En algunos casos el modo LIFO es el más común y utilizado debido a
su simplicidad y eficiencia en la mayoría de los escenarios.
Operaciones a realizar con estructura de pila. Ejemplos
Las estructuras de pila son muy útiles en programación para organizar
y manipular datos de manera eficiente, algunas de las operaciones comunes
que se pueden realizar con una estructura de pila son las siguientes:
1. Push (Empujar):
- La operación push se utiliza para agregar un elemento a la pila.
- El nuevo elemento se coloca en la cima de la pila.
2. Pop (Extraer):
6. - La operación pop se utiliza para extraer y eliminar el elemento que
se encuentra en la cima de la pila.
- Al hacer un pop, se obtiene el elemento más recientemente
agregado.
3. Peek (Mirar:
- La operación peek permite ver el elemento que se encuentra en la
cima de la pila sin extraerlo.
- Es útil para revisar cuál es el próximo elemento que será eliminado
al hacer un pop.
4. isEmpty (Está vacía):
- La operación isEmpty verifica si la pila está vacía, es decir, si no
tiene elementos.
- Devuelve verdadero si la pila está vacía y falso si tiene al menos un
elemento.
5. Size (Tamaño):
- La operación size devuelve la cantidad de elementos que hay en la
pila en un momento dado.
Diseñar Algoritmos elementales para el tratamiento de pila
A continuación algunos algoritmos elementales para el tratamiento de
una pila (stack) en C++:
1. Push (Agregar un elemento a la pila):
#include <iostream>
#include <stack>
void pushElement(std::stack<int>& s, int element) {
s.push(element);
std::cout << "Elemento " << element << " agregado a la pila." <<
std::endl;}
7. 2. Pop (Eliminar el elemento superior de la pila):
#include <iostream>
#include <stack>
void popElement(std::stack<int>& s) {
if (!s.empty()) {
int topElement = s.top();
s.pop();
std::cout << "Elemento " << topElement << " eliminado de la pila."
<< std::endl;
} else {
std::cout << "La pila está vacía, no se puede eliminar ningún
elemento." << std::endl; }}
3. Top (Obtener el elemento superior de la pila sin eliminarlo):
#include <iostream>
#include <stack>
void topElement(std::stack<int>& s) {
if (!s.empty()) {
int topElement = s.top();
std::cout << "El elemento superior de la pila es: " << topElement
<< std::endl;
} else {
std::cout << "La pila está vacía, no hay elementos para mostrar."
<< std::endl; }}
4. Verificar si la pila está vacía:
#include <iostream>
#include <stack>
void isEmpty(std::stack<int>& s) {
if (s.empty()) {
8. std::cout << "La pila está vacía." << std::endl;
} else {
std::cout << "La pila no está vacía." << std::endl; }}