La mayoría de los principiantes asumen que las estructuras de datos son estáticas. No lo son. Una pila vinculada es una bestia dinámica. Crece y se encoge sobre la marcha. No preasigna memoria. Lo tomas cuando lo necesitas. Suéltalo cuando hayas terminado.
Este ejemplo utiliza números enteros. Cambie typedef int stack_data a float o char si lo desea. La lógica sigue siendo la misma.
La interfaz
Mira el encabezado. Es un contrato.
stack_init crea el desorden. stack_clear lo borra. stack_empty te dice si queda algo. push introduce datos. pop los extrae.
Simple. Limpio.
El motor
El archivo de código esconde las agallas.
top apunta al elemento más nuevo. NULL significa vacío.
stack_init simplemente restablece top a NULL. Hecho.
stack_clear aparece hasta que está vacío. Es un bucle. Es barato.
stack_empty comprueba si top es NULL. Devuelve 1 si es verdadero. 0 si es falso.
stack_push hace el trabajo pesado.
Asigna memoria. Establece los datos. Lo vincula a la antigua tapa. Actualizaciones “arriba”.
stack_pop invierte el proceso.
Toma los datos. Mueve “arriba” hacia abajo. Libera el nodo antiguo. Devuelve el valor.
¿Si la pila está vacía? Devuelve basura. No salgas de una pila vacía.
Ocultación de información
Esto es clave.
Solo ves el encabezado. No ves el código.
La pila podría usar matrices. Punteros. Archivos. Una lista enlazada. No importa.
Mientras la interfaz funcione, no te importa cómo esté construida.
Eso es ocultar información. No es sólo una palabra de moda. Así es como se construye software que no se rompe cuando se cambian las partes internas.
C Errores
C no perdona los errores.
- Los paréntesis importan.
(*p).ino es lo mismo que*p.i. Primero se elimina la referencia al puntero. El otro accede al miembro y luego elimina la referencia. Si lo haces mal, te estrellarás. - Pérdidas de memoria. Nunca establezca simplemente
top = NULL. Dejas huérfano a todos los nodos de la lista. Pierdes los datos. Pierdes la memoria. Utilice “gratis”. Siempre. - Incluir encabezados.
NULLvive enstdio.h. Si lo olvida, su código podría compilarse en algunos compiladores. No lo hará con los demás. O definirá “NULL” como cero de una manera extraña. Incluyasi usa punteros.
¿Qué sigue?
La pila básica es simple. Las pilas reales necesitan más.
Agregue “dup”. Duplica el elemento superior. Agregue “recuento”. Devuelve el número de artículos. Agregue “agregar”. Pop los dos primeros, agréguelos, presione el resultado.
Cree un programa de controlador. Escribe un archivo MAKE. Compílalo. Ejecútelo.
Si falla, te perdiste un “gratis”. O accediste a la memoria liberada. Depurarlo.
La verificación de la realidad
La asignación dinámica es rápida. Hasta que no lo sea.
malloc y free tienen gastos generales. En bucles cerrados, se suma.
¿Pero para uso general? Es flexible. Es estándar. Es lo que verá en la mayoría de las bases de código C.
La pila vinculada es un bloque de construcción.
Lo usarás para llamadas a funciones. Para evaluación de expresiones. Para botones de deshacer.
Está en todas partes.
Sólo recuerda: si lo asignas, lo liberas. Si no.
“El código es como el humor

























