👨‍💻
Coding Library
  • 👨‍💻Coding Library
  • 👾Linux
    • Basic Commands
    • Other commands
      • Ls
      • Mv
      • Chmod
      • Ln
      • Cat
      • Wc
      • Grep
      • Sed
      • Find
    • Sistema de ficheros
      • Inodos
  • 📦Git
    • Page 3
  • 🖊️Vim
    • Vim Basics
      • Gramatica de Vim
      • Moviendote por un archivo
    • Todo y mas
  • 🏛️C
    • Estructuras de datos
      • Listas Enlazadas
      • Colas
      • Pilas
      • Arboles
    • Valgrind
    • Operadores de bits
    • Procesos e Hilos
      • Fork
      • Wait
      • Waitpid
      • Semáforos
      • Estructura sigaction
      • Signals
    • MiniLibX
      • Ventanas (windows)
      • Imprimir Pixels
      • Imagenes
      • Colores
      • Eventos
      • Loops (bucles)
      • Leer imagenes
    • Readline
    • Funciones
      • opendir
      • access
    • Network Programming
      • Structs
      • Llamadas al sistema
      • Synchronous I/O Multiplexing
        • kqueue
  • 🌃C++
    • Clases
      • Herencia
      • Shallow and deeps copies
      • Clases abstractas y Interfaces
      • Reasignar operadores
    • Punteros y referencias
    • Manejo de ficheros
    • Punteros a funciones
    • Excepciones
    • Casting
    • Templates
    • Templated Containers
      • Iterators
      • std::vector
      • std::list
      • std::map
  • 🧠Pyhton
    • Sintaxis basica
    • Scripts
    • Tipos de datos
      • Listas
      • Set
      • Diccionarios
      • Generadores
    • Estructuras de control
      • Iterar con For
      • Iterar con zip
      • Iterar con enumerate
    • Map, Filter and Reduce
    • Funciones
    • Clases
      • Metodos
      • Herencia
    • Formateo con {} y format()
    • Decoradores
  • 📦JAVA
    • Conceptos basicos
    • Programacion estructurada
    • Clases predefinidas
    • POO
      • Clases
      • Herencia
      • Polimorfismo
      • Abstraccion
      • Encapsulacion
    • ArrayList
    • Excepciones
  • ⚒️HTML
    • HTML Basics
    • Elementos de bloque
      • Titulos y parrafos
      • Header, Main y Footer
      • Section, article y aside
    • Elementos en línea
    • Atributos
    • Enlaces <a>
    • Listas
    • Tablas
    • Formularios
      • Input
      • Select y datalist
      • GET y POST
    • Contenido embebido
      • Imagenes
      • Audio y video
      • Iframe
  • 🎨CSS
    • Introduccion
    • Selectores
    • Como funciona CSS
    • Box Model
    • Desbordamiento y Colapso de margenes
    • Display
    • Position
    • Medidas absolutas y relativas
  • 🟡JavaScript
    • Promesas
    • Async/Await
  • 📲Svelte
    • Componentes
    • Reactividad
    • Directivas
    • Eventos
  • 🖥️Sistemas
    • Particiones
  • 🕸️Redes
    • IP Adress
    • Subnet Mask
  • 🕷️Web Scrapping
    • Scrapy
      • Spiders
        • CrawlerSpider
      • Process data
      • Save data
        • CSV y JSON
        • SQLite
    • Splash
    • Selenium
Powered by GitBook
On this page
  • Estructuras de las pilas
  • Apilar (Push)
  • Desapilar (Pop)
  • Destruir Pilas
  1. C
  2. Estructuras de datos

Pilas

Stack

PreviousColasNextArboles

Last updated 2 years ago

Una Pila es una clase especial de lista en la cual todas las inserciones y borrados tienen lugar en un extremo denominado extremo, cabeza o tope. otro nombre para las pilas son listas FIFO (último en entrar, primero en salir) o listas pushdown (empujadas hacia abajo). El modelo intuitivo de una pila es un conjunto de objetos apilados de forma que al añadir un objeto se coloca encima del ultimo añadido y para quitar un objeto del montón hay que quitar antes los que están por encima de él.

Un ejemplo practico que se suele utlizar para explicar este conceptos es una pila de platos. Mientras vamos lavando los platos, estos los vamos apilando y a la hora de utilizarlos el primero que cogemos es el ultimo que hemos lavado y colocado en la pila.

Una pila tambien se puede implementar como una lista enlazada, aunque al igual que con las colas, las operaciones seran distintas.

Estructuras de las pilas

La estructura de una pila es muy simple, tan solo se compone de una estructura que contine un puntero hacia la cima de la pila. Para mayor comodidad se puede agregar un integrer con la longitud de la pila e ir aumentado o decreciendo este segun el tamaño de la pila.

typedef struct pila 
{
    Nodo *cima;
} Pila;

Para crear una pila de manera dinamica podemos hacerlo mediante una funcion utilizando malloc y una vez creada habra que asginar a la cima el valor NULL.

Pila *crear_pila()
{
    Pila *pila = (Pila *)malloc(sizeof(Pila));
    pila->cima = NULL;
    return (pila);
}

Apilar (Push)

Tan solo hay que crear un nuevo nodo con la informacion solicitada, apuntar su siguiente al la cima y establecer la nueva cima como el nodo creado.

void apilar(Pila *pila, URL url)
{
    Nodo *nodo = crear_nodo(url);
    nodo->sigueinte = pila->cima;
    pila->cima = nodo;

Desapilar (Pop)

Antes que nada hay que comprobar la que la pila no este vacia. Una vez hecho guardaremos el primer nodo en una variable auxiliar, para su posterior eliminacion y depues estableceremos la cima como siguiente nodo del primero pila->cima->siguiente.

void desapilar(Pila *pila)
{
    if (pila->cima != NULL)
    {
        Nodo *eliminar = pila->cima;
        pila->cima = pila->cima->siguiente;
        destruir_nodo(eliminar);
    }
}

Destruir Pilas

En el caso de hayas terminado de utilizar la pila y no sea necesaria su utilizacion, es recomendable eliminarla para evitar tener memoria en desuso. Para esto tan solo hay que ir sacando uno a uno los elementos de la pila y una vez vaciada hay que eliminar el espacio que ocupa la pila por si misma.

void destruir_pila(Pila *pila)
{
    while (pila->cima != NULL)
        Desapilar(pilar);
    free(pila);
}

Apilar significa introducir algo en la pila. Este elemento sera introducido en el extremo de la pila, conocido como cima o Peek y para ello se puede utilizar la funcion . Aun asi este es un ejemplo de como apilar elementos en una pila:

Desapilar significar eliminar el ultimo elemento intruducido en la pila, que es el elemento situado en la cima. Es decir si introducimos un elemento por por un extremo, tendremos que eliminarlo por ese mismo extremo. Para esto se puede utilizar la funcion . Aun asi este es un ejemplo de como desapilar elementos en una pila:

🏛️
insertar_principio
eliminar_principio