Estructuras de Datos INF-152 Integrantes: Robert Bello. Anthony Moscat. Manuel Cabrera. Profesor: Sergio Sánchez.

y Ejemplos de aplicación. y Ejemplos de aplicación. y Implementación usando arreglos. 2 .Contenidos a Tratar. y Implementación usando arreglos. € Pilas: y Definición. € Colas: y Definición.

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. € Su nombre se deriva de la metáfora de una pila de platos en una cocina.La Estructura de Datos PILA. Entra Sale € Tope € 3 .

y Push: añade un nuevo elemento al principio de la pila. € Otras operaciones usualmente incluidas en el tipo de dato abstracto pila son: y isEmpty (estáVacia): verifica si la pila está vacía. y Pop: elimina un elemento al principio de la pila. € Las operaciones básicas de una pila son ³push´ (empujar.Operaciones de una PILA. meter) y ³pop´ (sacar). y isFull (estáLlena): verifica si la pila está llena. 4 .

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

return ps. € En C.Implementación con arreglos. struct Stack *create_stack (struct Stack *ps) { ps = (struct Stack *) malloc(sizeof(struct Stack)). }. € #define STACKSIZE 100 struct Stack{ int top. ps=create_stack(ps). : } 6 . mientras que la pila es de tamaño dinámico. Una pila es una colección ordenada de objetos. int nodes[STACKSIZE]. los arreglos permiten almacenar colecciones ordenadas. ps->top=-1. € La desventaja de implementar una pila mediante un arreglo es que esta última es de tamaño fijo. } main(){ struct Stack *ps.

ps->nodes[ps->top] = i. } } 7 . PUSH void push(struct Stack* ps. int i) { if (ps->top == (STACKSIZE -1)) printf(´Full stack\n").Las Operaciones Básicas. } } POP int pop(struct Stack *ps) { if (ps->top== -1) printf(´Empty stack\n"). else { ps->top++. return t. ps->top--. else { int t= ps->nodes[ps-> top].

Aplicaciones de las Pilas. dirección (pop) de la pila de sitios visitados. la cual extraer el estado del texto antes del último cambio realizado. € Navegador Web y Se almacenan los sitios previamente visitados. € Editores de texto y Los cambios efectuados se almacenan en una pila. simplemente se extrae la última. y Usualmente implementada como arreglo. y Usuario puede deshacer los cambios mediante la operación ³undo´. y Cuando el usuario quiere regresar (presiona el botón de retroceso). 8 .

Entra cola € € frente Sale 9 . La inserción y extracción de elementos de la cola siguen el principio FIFO (first-in-first-out).La Estructura de Datos COLA. € Su nombre se deriva de la metáfora de una cola de personas en una taquilla. El elemento con más tiempo en la cola es el que puede ser extraído.

10 .Operaciones de una COLA. € Otras operaciones usualmente incluidas en el tipo abstracto COLA son: y isEmpty (estáVacia): verifica si la cola está vacía. y Dequeue: elimina (saca) el primer elemento de la cola. € Las operaciones básicas de una cola son ³enqueue´ (meter) y ³dequeue´ (sacar) y Enqueue: añade un nuevo elemento a final de la cola. y isFull (estáLlena): verifica si la cola está llena.

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

En C. }. } main(){ struct Queue *ps.Implementación con arreglos. int rear. ps=create_queue(ps). € Una cola es una colección ordenada de objetos. return ps. los arreglos permiten almacenar colecciones ordenadas. ps->front = 0. Misma desventaja: los arreglos tienen tamaño fijo. : } 12 € € € . Uso eficiente mediante un arreglo circular. ps->rear = -1. #define QUEUESIZE 100 struct Queue{ int front. int nodes[QUEUESIZE]. struct Queue *create_queuek (struct Queue *ps) { ps = (struct Queue *) malloc(sizeof(struct Queue)).

Las operaciones básicas. else { ps->rear++. return t. ps->front++. ¿qué hacer? 13 . } } DEQUEUE int dequeue (struct Queue *ps) { if (ps->front == ps->rear + 1) printf(´Empty stack\n"). int i) { if (ps->rear == (QUEUESIZE -1)) printf(´Full queue\n"). } } NO se tiene un arreglo circular. else { int t= ps->nodes[ps-> front]. ENQUEUE void enqueue(struct Queue* ps. ps->nodes[ps->rear] = i.

‡ La idea es insertar elementos en las localidades previamente desocupadas. ‡ El objetivo de una cola circular es aprovechar al máximo el espacio del arreglo. ‡ La implementación tradicional considera dejar un espacio entre el frente y la cola.Colas circulares. a frente e frente f b c d e f g cola g cola h i cola e frente f g 14 .

15 € . operaciones en redes de computadoras y Trabajos enviados a una impresora. y Solicitudes a un servidor. € Clientes solicitando ser atendidos por una telefonista.Aplicaciones de las colas. Simulaciones de cualquier situación real en la que se presente una ³organización´ tipo cola. € En general.