Pilas y Colas

Post on 23-Mar-2016

74 views 1 download

description

Pilas y Colas. Cursos Propedéuticos 2006 Programación y Estructuras de Datos Manuel Montes (mmontesg@inaoep.mx) Claudia Feregrino (cferegrino@inaoep.mx). 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

Pilas y Colas

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

Manuel Montes (mmontesg@inaoep.mx)Claudia Feregrino (cferegrino@inaoep.mx)

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

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

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

Ejemplo

4 4

1

4

1

1

4

1

4

1

4

4

1

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

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);:}

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

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.

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

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

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

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);:}

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?

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

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