Stacks in C-C++


C language

#include <stdio.h>
#include <stdlib.h>
typedef struct Nodo{
    int dato;
    struct Nodo *siguiente;
}Nodo;

typedef struct{
    Nodo *tope;
}Pila;

void iniciarPila(Pila *pila){
    pila->tope = NULL;
}

void push(Pila *pila, int valor){
    Nodo *nuevoNodo = (Nodo*)malloc(sizeof(Nodo));
    nuevoNodo->dato = valor;
    nuevoNodo->siguiente = pila->tope;
    pila->tope = nuevoNodo;
}

int estaVacia(Pila *pila){
    return pila->tope == NULL;
}

void mostrarPila(Pila *pila){
    if(estaVacia(pila)){
        printf("La pila está vacía\n");
        return;
    }
    Nodo *actual = pila->tope;
    while(actual != NULL){
        printf("%d ->", actual->dato);
        actual = actual->siguiente;
    }
    printf("NULL\n");
};

int pop(Pila *pila){
    if(estaVacia(pila)){
        printf("La pila está vacía\n");
        return -1;
    }
    Nodo *nodoAEliminar = pila->tope;
    int valor = nodoAEliminar->dato;
    pila->tope = nodoAEliminar->siguiente;
    free(nodoAEliminar);
    return valor;
}

int peek(Pila *pila){
    if(estaVacia(pila)){
        printf("La pila está vacía\n");
        return -1;
    }
    return pila->tope->dato;
}

void liberarPila(Pila *pila){
    while(!estaVacia(pila)){    
        pop(pila);
    }
}

int main()
{
    Pila pila;
    iniciarPila(&pila);
    push(&pila,10);
    push(&pila,20);
    push(&pila,30);
    mostrarPila(&pila);
    printf("Elemento del tope %d\n",peek(&pila));
    printf("Sacando elemento %d\n",pop(&pila));
    mostrarPila(&pila);
    liberarPila(&pila);
    mostrarPila(&pila);
    return 0;
}