La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Pilas y Colas Cursos Propedéuticos 2006 Programación y Estructuras de Datos Manuel Montes Claudia Feregrino

Presentaciones similares


Presentación del tema: "Pilas y Colas Cursos Propedéuticos 2006 Programación y Estructuras de Datos Manuel Montes Claudia Feregrino"— Transcripción de la presentación:

1 Pilas y Colas Cursos Propedéuticos 2006 Programación y Estructuras de Datos Manuel Montes (mmontesg@inaoep.mx) Claudia Feregrino (cferegrino@inaoep.mx)

2 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

3 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

4 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

5 Ejemplo 4 4 1 4 1 1 4 1 4 1 4 4 1 push(4) push(1) pop() push(4) pop()

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

7 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

8 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.

9 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

10 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

11 Ejemplo a a b a b c b c No es necesario mover todos los elementos a b a b c b c Apuntadores al frente y a la cola a

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

13 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?

14 Colas circulares a e f g b cd 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 g i frente cola frente cola

15 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


Descargar ppt "Pilas y Colas Cursos Propedéuticos 2006 Programación y Estructuras de Datos Manuel Montes Claudia Feregrino"

Presentaciones similares


Anuncios Google