Estructuras de datos en C/C++

La estructura de datos pila (stack) en C y C++

En esta lección vas a implementar las operaciones de una pila, con la regla último en entrar, primero en salir, usando un arreglo fijo en C y std::stack en C++.

Introducción

La pila (stack) solo permite trabajar en la cima: push pone un elemento nuevo en la cima, pop quita el elemento de la cima y peek consulta la cima sin quitarla. La pila sigue la regla último en entrar, primero en salir (LIFO), como una pila de libros.

Puntos importantes

  • Define las condiciones que siempre deben cumplirse (invariantes) antes de escribir las operaciones.
  • Trata los casos de estructura vacía, llena y de fallo al reservar memoria.
  • Evalúa a la vez la complejidad y la gestión de memoria de cada operación.

Mira cómo funciona

Haz push y pop para ver que el último elemento que entra siempre es el primero en salir.

Ejemplos de código C y C++

C
Ejecutar →
main.c
#include <stdio.h>

typedef struct {
    int data[8];
    int size;
} Stack;

int push(Stack *stack, int value) {
    if (stack->size == 8) return 0;
    stack->data[stack->size++] = value;
    return 1;
}

int pop(Stack *stack, int *value) {
    if (stack->size == 0) return 0;
    *value = stack->data[--stack->size];
    return 1;
}

int main(void) {
    Stack stack = {{0}, 0};
    int value;
    push(&stack, 10);
    push(&stack, 20);
    pop(&stack, &value);
    printf("%d\n", value);
}
Resultado de la ejecución
20
C++
Ejecutar →
main.cpp
#include <iostream>
#include <stack>

int main() {
    std::stack<int> values;
    values.push(10);
    values.push(20);
    std::cout << values.top() << '\n';
    values.pop();
}
Resultado de la ejecución
20

Comparación entre C y C++

La versión de C usa un arreglo fijo de 8 elementos, así que debe comprobar que la pila no esté llena al hacer push (desbordamiento de pila) ni vacía al hacer pop. En C++, std::stack gestiona la capacidad mediante el contenedor subyacente y ofrece las mismas operaciones push, pop y top con la regla LIFO.

C

Los datos (struct) y las operaciones están separados, y la memoria se reserva y se libera a mano.

C++

Las clases y los contenedores protegen la coherencia de los datos y gestionan sus propios recursos.

Ejercicios de práctica

Ejecuta las dos versiones y después modifica el código para ver la diferencia de seguridad que aporta cada lenguaje.

  • Añade pruebas para el estado vacío y para el momento en que se alcanza la capacidad máxima.
  • Escribe la liberación de la memoria y comprueba que no haya fugas.
  • Compara la complejidad con la del contenedor equivalente de la biblioteca estándar.

Practica con un reto

Usa lo que cubre esta lección para resolver un problema real. Cada reto se ejecuta en el navegador, con pruebas al instante y una revisión de IA.

Todos los retos