Pilas y Colas

15
Pilas y Colas Cursos Propedéuticos 2006 Programación y Estructuras de Datos Manuel Montes ([email protected]) Claudia Feregrino ([email protected])

description

Pilas y Colas. Cursos Propedéuticos 2006 Programación y Estructuras de Datos Manuel Montes ([email protected]) Claudia Feregrino ([email protected]). Contenido de la sección. Pilas Definición Implementación usando arreglos Ejemplos de aplicación Colas Definición - PowerPoint PPT Presentation

Transcript of Pilas y Colas

Page 1: Pilas y Colas

Pilas y Colas

Cursos Propedéuticos 2006Programación y Estructuras de Datos

Manuel Montes ([email protected])Claudia Feregrino ([email protected])

Page 2: Pilas y Colas

Contenido de la sección

• Pilas– Definición– Implementación usando arreglos– Ejemplos de aplicación

• Colas– Definición– Implementación usando arreglos– Ejemplos de aplicación

Page 3: Pilas y Colas

La estructura de datos PILA

• Su nombre se deriva de la metáfora de una pila de platos en una cocina.

• La inserción y extracción de elementos de la pila siguen el principio LIFO (last-in-first-out).

• El último elemento en entrar es el único accesible en cada momento.

Entra Sale

Tope

Page 4: Pilas y Colas

Operaciones de una PILA

• Las operaciones básicas de una pila son “push” (empujar, meter) y “pop” (sacar)– Push: añade un nuevo elemento a la pila

– Pop: elimina un elemento de la pila

• Otras operaciones usualmente incluidas en el tipo de dato abstracto pila son:– isEmpty (estáVacia): verifica si la pila está vacía

– isFull (estáLlena): verifica si la pila está llena

Page 5: Pilas y Colas

Ejemplo

4 4

1

4

1

1

4

1

4

1

4

4

1

push(4) push(1) push(1) pop() push(4) pop()

Page 6: Pilas y Colas

Implementación con arreglos

• Una pila es una colección ordenada de objetos.

• En C, los arreglos permiten almacenar colecciones ordenadas.

• La desventaja de implementar una pila mediante un arreglo es que esta última es de tamaño fijo, mientras que la pila es de tamaño dinámico.

#define STACKSIZE 100struct Stack{ int top; int nodes[STACKSIZE];};struct Stack *create_stack (struct Stack *ps) { ps = (struct Stack *) malloc(sizeof(struct Stack)); ps->top=-1; return ps;}

main(){ struct Stack *ps; ps=create_stack(ps);:}

Page 7: Pilas y Colas

Las operaciones básicas

void push(struct Stack* ps, int i) { if (ps->top == (STACKSIZE -1)) printf(“Full stack\n"); else { ps->top++; ps->nodes[ps->top] = i; }}

int pop(struct Stack *ps) { if (ps->top== -1) printf(“Empty stack\n"); else { int t= ps->nodes[ps-> top]; ps->top--; return t; }}

PUSH POP

Page 8: Pilas y Colas

Aplicaciones de las pilas

• Navegador Web– Se almacenan los sitios previamente visitados– Cuando el usuario quiere regresar (presiona el botón

de retroceso), simplemente se extrae la última dirección (pop) de la pila de sitios visitados.

• Editores de texto– Los cambios efectuados se almacenan en una pila– Usualmente implementada como arreglo– Usuario puede deshacer los cambios mediante la

operación “undo”, la cual extraer el estado del texto antes del último cambio realizado.

Page 9: Pilas y Colas

La estructura de datos COLA

• Su nombre se deriva de la metáfora de una cola de personas en una taquilla.

• La inserción y extracción de elementos de la cola siguen el principio FIFO (first-in-first-out).

• El elemento con más tiempo en la cola es el que puede ser extraído.

Entra

Sale

cola

frente

Page 10: Pilas y Colas

Operaciones de una COLA

• Las operaciones básicas de una cola son “enqueue” (meter) y “dequeue” (sacar)– enqueue: añade un nuevo elemento a final de la cola

– dequeue: elimina (saca) el primer elemento de la cola

• Otras operaciones usualmente incluidas en el tipo abstracto COLA son:– isEmpty (estáVacia): verifica si la cola está vacía

– isFull (estáLlena): verifica si la cola está llena

Page 11: Pilas y Colas

Ejemplo

a

a b

a b c

b c

No es necesario movertodos los elementos

a b

a b c

b c

Apuntadores al frentey a la cola

a

Page 12: Pilas y Colas

Implementación con arreglos

• Una cola es una colección ordenada de objetos.

• En C, los arreglos permiten almacenar colecciones ordenadas.

• Misma desventaja: los arreglos tienen tamaño fijo.

• Uso eficiente mediante un arreglo circular.

#define QUEUESIZE 100struct Queue{ int front; int rear; int nodes[QUEUESIZE];};struct Queue *create_queuek (struct Queue *ps) { ps = (struct Queue *) malloc(sizeof(struct Queue)); ps->front = 0; ps->rear = -1; return ps;}

main(){ struct Queue *ps; ps=create_queue(ps);:}

Page 13: Pilas y Colas

Las operaciones básicas

void enqueue(struct Queue* ps, int i) { if (ps->rear == (QUEUESIZE -1)) printf(“Full queue\n"); else { ps->rear++; ps->nodes[ps->rear] = i; }}

int dequeue (struct Queue *ps) { if (ps->front == ps->rear + 1) printf(“Empty stack\n"); else { int t= ps->nodes[ps-> front]; ps->front++; return t; }}

ENQUEUE DEQUEUE

NO se tiene un arreglo circular, ¿qué hacer?

Page 14: Pilas y Colas

Colas circulares

a e f gb c d• El objetivo de una cola

circular es aprovechar al máximo el espacio del arreglo.

• La idea es insertar elementos en las localidades previamente desocupadas.

• La implementación tradicional considera dejar un espacio entre el frente y la cola.

e f g

frente cola

h e f gi

frentecola

frente cola

Page 15: Pilas y Colas

Aplicaciones de las colas

• En general, operaciones en redes de computadoras– Trabajos enviados a una impresora– Solicitudes a un servidor.

• Clientes solicitando ser atendidos por una telefonista

• Simulaciones de cualquier situación real en la que se presente una “organización” tipo cola