La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Manuel Montes y Gómez Laboratorio de Tecnologías del Lenguaje

Presentaciones similares


Presentación del tema: "Manuel Montes y Gómez Laboratorio de Tecnologías del Lenguaje"— Transcripción de la presentación:

1 Programación y estructuras de datos Propedeútico de Ciencias Computacionales
Manuel Montes y Gómez Laboratorio de Tecnologías del Lenguaje Coordinación de Ciencias Computacionales – INAOE

2 Contenido de la sección
Pilas Definición Implementación usando arreglos Ejemplos de aplicación Colas

3 Special Topics on Information Retrieval
Definición de Pila Una pila representa una estructura lineal de datos en que se puede agregar o quitar elementos únicamente por uno de los dos extremos. En consecuencia, los elementos de una pila se eliminan en el orden inverso al que se insertaron. Debido a está característica, se le conoce como estructura LIFO (last input, first output). Entra Sale Tope Special Topics on Information Retrieval

4 Representaciones de pilas
Entra Sale Las pilas no son estructuras fundamentales de datos, es decir, no están definidas como tales en los lenguajes de programación. Para su representación requieren de otras EDs, como: arreglos y listas La desventaja de implementar una pila mediante un arreglo es que este último es de tamaño fijo, mientras que la pila es de tamaño dinámico. MAX Tope Arreglo[MAX] Special Topics on Information Retrieval

5 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

6 Ejemplo 1 4 1 1 1 1 1 4 4 4 4 4 4 push(4) push(1) push(1) pop()

7 Special Topics on Information Retrieval
Errores comunes Al utilizar arreglos para implementar pilas se tiene la limitación de que se debe reservar el espacio en memoria con anticipación. Una vez dado un máximo de capacidad a la pila no es posible insertar un número de elementos mayor que el máximo establecido. Si esto ocurre, es decir, si la pila está llena y se intenta insertar un nuevo elemento, se producirá un error conocido como desbordamiento –overflow. Otro error que se puede presentar es tratar de eliminar un elemento de un pila vacía. Este tipo de error se le conoce como subdesbordamiento –underflow. Special Topics on Information Retrieval

8 Special Topics on Information Retrieval
Ejercicio 2 Escriba el pseudocódigo de las operaciones push y pop de una pila implementada mediante un arreglo con capacidad máxima igual a MAX. Use la variable tope para indicar la posición del último elemento de la pila Cuide que no se den los errores de overflow y underflow Tiempo máximo = 30 min Special Topics on Information Retrieval

9 Implementación con arreglos en C
#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); :

10 Las operaciones básicas
PUSH POP 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; }

11 Implementación en python (con una lista)
Special Topics on Information Retrieval

12 Aplicaciones de las pilas
Llamadas a subprogramas Recursividad Tratamiento de expresiones aritméticas Ordenación Otras aplicaciones: Navegador Web: se almacenan los sitios previamente visitados Editores de texto: los cambios efectuados se almacenan en una pila.

13 Special Topics on Information Retrieval
Ejercicio 3 Escriba el pseudocódigo de un programa que imprime el número más grande contenido en una lista L de n números. Tiempo máximo = 5 min Special Topics on Information Retrieval

14 La estructura de datos COLA
Su nombre se deriva de la metáfora de una cola de personas en una taquilla, donde los recién llegados se sitúan al final, y la salida es por delante. La inserción y extracción de elementos de la cola siguen el principio FIFO (first-in-first-out): primer dato en entrar es el primero en salir. Entra cola frente Sale

15 Representaciones de colas
Entra Al igual que las pilas, para su representación las colas también requieren de otras EDs, como: arreglos y listas. La desventaja de implementar una pila mediante un arreglo es que este último es de tamaño fijo, mientras que la pila es de tamaño dinámico. MAX cola frente Sale Special Topics on Information Retrieval

16 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

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

18 Special Topics on Information Retrieval
Ejercicio 4 Escriba el pseudocódigo de las operaciones enqueue y dequeue de una cola implementada mediante un arreglo con capacidad máxima igual a MAX. Cuide que no se den los errores de overflow y underflow Tiempo máximo = 30 min Special Topics on Information Retrieval

19 Implementación con arreglos en C
#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 que las pilas: los arreglos tienen tamaño fijo.

20 Las operaciones básicas
ENQUEUE DEQUEUE 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; }

21 Ejemplo a a a b a b a b c a b c b c b c Apuntadores al frente y a la cola No es necesario mover todos los elementos Cuando se llegue al final del arreglo podría haber muchos espacios libres al inicio de la lista, ¿qué hacer para usarlos?

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

23 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

24 Special Topics on Information Retrieval
Ejercicio 5 Modifique el siguiente código de inserción de dato en cola, para tener una implementación de cola circular. Tiempo máximo = 20 min ENQUEUE void enqueue(struct Queue* ps, int i) { if (ps->rear == (QUEUESIZE -1)) printf(“Full queue\n"); else { ps->rear++; ps->nodes[ps->rear] = i; } #define QUEUESIZE 100 struct Queue{ int front; int rear; int nodes[QUEUESIZE]; }; Special Topics on Information Retrieval


Descargar ppt "Manuel Montes y Gómez Laboratorio de Tecnologías del Lenguaje"

Presentaciones similares


Anuncios Google