1 / 15

Pilas y Colas

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

brygid
Download Presentation

Pilas y Colas

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  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. Sale Entra 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 1 4 1 1 1 1 1 4 4 4 4 4 4 push(4) pop() pop() push(1) push(1) push(4)

  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; } } POP PUSH int pop(struct Stack *ps) { if (ps->top== -1) printf(“Empty stack\n"); else { int t= ps->nodes[ps-> top]; ps->top--; return t; } }

  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 cola frente Sale

  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 a b a b a c b a c b c b c b Apuntadores al frente y a la cola No es necesario mover todos los elementos

  12. Implementación con arreglos #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); : } • 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.

  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; } } DEQUEUE ENQUEUE 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; } } NO se tiene un arreglo circular, ¿qué hacer?

  14. Colas circulares • 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 g f c d b a frente cola e g f frente cola e g f i h 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

More Related