Estructuras de Datos

0x0042 INICIALIZANDO...
0x7ffe-stack
*p = malloc(sizeof(Node))
0x3b2a - heap
ptr -> next = NULL
Unidad 08

Pilas y Colas

Una Pila (Stack) es una estructura lineal que sigue el principio LIFO (Last In, First Out). Imagina una pila de platos: solo puedes poner uno nuevo encima (Push) o quitar el de más arriba (Pop). No puedes sacar el del fondo sin quitar los demás.

Imagen 32. Estructura y operaciones de una Pila

Imagen 32. Estructura y operaciones de una Pila

Diagrama LIFO: Visualización de las operaciones fundamentales. "Push" agrega al tope y "Pop" elimina del tope.

8.1 Pilas (Stacks) y el "Undo/Redo"
Mirar en YouTube
main.cpp
#define MAX 100

struct Pila {
int items[MAX];
int tope;
};

void push(struct Pila* p, int valor) {
if (p->tope == MAX - 1) {
printf("Stack Overflow!\n");
} else {
p->items[++(p->tope)] = valor;
}
}
#define MAX 100

struct Pila {
int items[MAX];
int tope;
};

void push(struct Pila* p, int valor) {
if (p->tope == MAX - 1) {
printf("Stack Overflow!\n");
} else {
p->items[++(p->tope)] = valor;
}
}

Una Cola (Queue) funciona bajo el principio FIFO (First In, First Out). Es idéntico a una fila en el banco o el supermercado: los elementos se insertan por el final (Enqueue) y se extraen por el frente (Dequeue).

Imagen 33. Estructura y flujo de una Cola

Imagen 33. Estructura y flujo de una Cola

Diagrama FIFO: Los datos fluyen en una dirección. Entran por la "cola" y salen por la "cabeza".

8.2 Colas (Queues) y la Impresora
Mirar en YouTube
main.cpp
void enqueue(struct Cola* c, int valor) {
if (c->final == MAX - 1)
printf("Cola llena\n");
else {
if (c->frente == -1) c->frente = 0;
c->items[++(c->final)] = valor;
}
}
void enqueue(struct Cola* c, int valor) {
if (c->final == MAX - 1)
printf("Cola llena\n");
else {
if (c->frente == -1) c->frente = 0;
c->items[++(c->final)] = valor;
}
}

Tanto Pilas como Colas son "Tipos de Datos Abstractos" (TDA). Esto significa que definen un comportamiento, pero no cómo se guardan los bits. Podemos implementarlas usando Arreglos (memoria estática) o Listas Enlazadas (memoria dinámica).

8.3 Implementación: Array vs Lista
Mirar en YouTube

Resumen: - Usa Arrays si sabes el tamaño máximo de antemano y la velocidad es crítica (ej. sistemas embebidos). - Usa Listas Enlazadas si el número de elementos es impredecible y quieres evitar el desbordamiento de memoria.