20
Estructura de Datos Tema 2. Colas Presenta: David Martínez Torres Universidad Tecnológica de la Mixteca Instituto de Computación Oficina No. 37 [email protected]

Estructura de Datos: Tema 2. Colasdtorres/cursos/estructuradedatos/Tema2-Colas.pdf · 4. Colas de prioridad Tanto la pila como la cola son estructuras de datos cuyos elementos están

  • Upload
    others

  • View
    6

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Estructura de Datos: Tema 2. Colasdtorres/cursos/estructuradedatos/Tema2-Colas.pdf · 4. Colas de prioridad Tanto la pila como la cola son estructuras de datos cuyos elementos están

Estructura de DatosTema 2. Colas

Presenta: David Martínez Torres

Universidad Tecnológica de la Mixteca

Instituto de Computación

Oficina No. 37

[email protected]

Page 2: Estructura de Datos: Tema 2. Colasdtorres/cursos/estructuradedatos/Tema2-Colas.pdf · 4. Colas de prioridad Tanto la pila como la cola son estructuras de datos cuyos elementos están

2

Contenido

1. Definición y operaciones

2. Implementación estática

3. Implementación dinámica

4. Colas de prioridad

5. Casos de estudio

Page 3: Estructura de Datos: Tema 2. Colasdtorres/cursos/estructuradedatos/Tema2-Colas.pdf · 4. Colas de prioridad Tanto la pila como la cola son estructuras de datos cuyos elementos están

3

1. Definición y operaciones

La cola es una colección ordenada de elementos de la que se pueden borrar elementos en un extremo (llamado el frente de la cola) o insertarlos por el otro (llamado el final de la cola).

El primer elemento insertado en la cola, es el primero en ser eliminado; razón por la que a las colas se les conoce como una estructura de datos

FIFO (por first-in, first-out)

Page 4: Estructura de Datos: Tema 2. Colasdtorres/cursos/estructuradedatos/Tema2-Colas.pdf · 4. Colas de prioridad Tanto la pila como la cola son estructuras de datos cuyos elementos están

4

1. Definición y operaciones

Insertar un elemento a la cola

insertar(&cola, elemento);

Eliminar un elemento de la cola

elemento= borrar(&cola);

Determinar si la cola esta vacía

bandera=vacia(cola);

Determinar si la cola esta llena

bandera=llena(cola);

Ejemplificar:

insertar(&cola,A);

insertar(&cola,B);

insertar(&cola,C);

eliminar(&cola);

eliminar(&cola);

insertar(&cola,D);

eliminar(&cola);

eliminar(&cola);

insertar(&cola,E);

Page 5: Estructura de Datos: Tema 2. Colasdtorres/cursos/estructuradedatos/Tema2-Colas.pdf · 4. Colas de prioridad Tanto la pila como la cola son estructuras de datos cuyos elementos están

5

1. Definición y operaciones: Aplicaciones con colas

La cola de clientes en el banco,

En la parada de camiones,

Cola para cargar gasolina, para pagar casetas de cobro.

Cola de alumnos en la biblioteca, o librería, etc.

Cola en un supermercado

Page 6: Estructura de Datos: Tema 2. Colasdtorres/cursos/estructuradedatos/Tema2-Colas.pdf · 4. Colas de prioridad Tanto la pila como la cola son estructuras de datos cuyos elementos están

6

2. Implementación estática

#define MAX 7

typedef struct{

int frente, final;

int elementos[MAX];

}Cola;

Representación de una cola estática usando arreglos.

Page 7: Estructura de Datos: Tema 2. Colasdtorres/cursos/estructuradedatos/Tema2-Colas.pdf · 4. Colas de prioridad Tanto la pila como la cola son estructuras de datos cuyos elementos están

7

2. Implementación estática

#define MAX 7typedef struct{

int frente, final;int elementos[MAX];

}Cola;

void insertar(Cola *colaT, int dato);int eliminar(Cola *colaT);

int main(){int dato;Cola cola;cola.frente=-1;cola.final=0insertar(&cola, 1);insertar(&cola, 3);dato = eliminar(&cola);…}

Ejemplificar

Page 8: Estructura de Datos: Tema 2. Colasdtorres/cursos/estructuradedatos/Tema2-Colas.pdf · 4. Colas de prioridad Tanto la pila como la cola son estructuras de datos cuyos elementos están

2. Implementación estática de una cola en línea recta

void insertar(Cola *colaT, int dato){

colaT->elementos[colaT->final]=dato;

colaT->final++;

}

8

Ejemplificar

Page 9: Estructura de Datos: Tema 2. Colasdtorres/cursos/estructuradedatos/Tema2-Colas.pdf · 4. Colas de prioridad Tanto la pila como la cola son estructuras de datos cuyos elementos están

2. Implementación estática de una cola en línea recta

int eliminar(Cola *colaTemp){

int x;

colaTemp->frente++;

x=colaTemp->elementos[colaTemp->frente];

return x;

}

9

Ejemplificar

Page 10: Estructura de Datos: Tema 2. Colasdtorres/cursos/estructuradedatos/Tema2-Colas.pdf · 4. Colas de prioridad Tanto la pila como la cola son estructuras de datos cuyos elementos están

2. Implementación estática de una cola en línea recta

//función que determina si la cola está llena

int llena(Cola colaT){

int bandera=0;

if (colaT.final==MAX)

bandera= 1;

return bandera;

}

10

Page 11: Estructura de Datos: Tema 2. Colasdtorres/cursos/estructuradedatos/Tema2-Colas.pdf · 4. Colas de prioridad Tanto la pila como la cola son estructuras de datos cuyos elementos están

2. Implementación estática

int vacia(Cola colaT){

int bandera=0;

if ((colaT.frente)+1 == colaT.final)

bandera= 1;

return bandera;

}

11

Page 12: Estructura de Datos: Tema 2. Colasdtorres/cursos/estructuradedatos/Tema2-Colas.pdf · 4. Colas de prioridad Tanto la pila como la cola son estructuras de datos cuyos elementos están

12

3. Implementación dinámica: tipos de datos

typedef struct nodo{

int info;

struct nodo *sig;

}Nodo;

typedef struct{

struct nodo * ini;

struct nodo * fin;

}Cola;

typedef Cola * ColaPtr;

typedef Nodo * NodoPtr;

Insertar a la cola vacía, el 3, 2 y 8.

3

ini fin

cola

3 2

ini fin

cola

3 2 8

ini fin

cola

ini fin

cola

Page 13: Estructura de Datos: Tema 2. Colasdtorres/cursos/estructuradedatos/Tema2-Colas.pdf · 4. Colas de prioridad Tanto la pila como la cola son estructuras de datos cuyos elementos están

13

3. Implementación dinámica: tipos de datos y main

typedef struct nodo{

int info;

struct nodo *sig;

}Nodo;

typedef struct{

struct nodo * ini;

struct nodo * fin;

}Cola;

typedef Cola * ColaPtr;

typedef Nodo * NodoPtr;

void insertar(ColaPtr colaT, int dato);

int eliminar(ColaPtr colaT);

int main(){

Cola cola={NULL};

int dato;

insertar(&cola, 3);

insertar(&cola, 2);

insertar(&cola, 8);

dato=eliminar(&cola);

...

}

...

Ejemplificar el siguiente código

Page 14: Estructura de Datos: Tema 2. Colasdtorres/cursos/estructuradedatos/Tema2-Colas.pdf · 4. Colas de prioridad Tanto la pila como la cola son estructuras de datos cuyos elementos están

3. Implementación dinámica: insertar

void insertar(ColaPtr colaT, int dato){NodoPtr nuevo;nuevo=(NodoPtr)malloc(sizeof(Nodo));if(nuevo==NULL)

printf("no hay memoria\n");else {

nuevo->dato=dato;nuevo->sig=NULL;if(colaT->ini==NULL)

colaT->ini=nuevo;else

colaT->fin->sig=nuevo;colaT->fin=nuevo;

}}

14

Ejemplificar

Insertar a la cola vacía, el 3, 2 y 8.

3 2 8

ini fin

cola

Page 15: Estructura de Datos: Tema 2. Colasdtorres/cursos/estructuradedatos/Tema2-Colas.pdf · 4. Colas de prioridad Tanto la pila como la cola son estructuras de datos cuyos elementos están

3. Implementación dinámica: eliminar

int eliminar(ColaPtr colaT) {NodoPtr temp;int dato;temp=colaT->ini;dato=temp->dato;if(colaT->ini==colaT->fin)

colaT->fin=temp->sig;colaT->ini=temp->sig;free(temp);return dato;}

15

Eliminar un elemento

3 2 8

ini fin

cola

Ejemplificar

Page 16: Estructura de Datos: Tema 2. Colasdtorres/cursos/estructuradedatos/Tema2-Colas.pdf · 4. Colas de prioridad Tanto la pila como la cola son estructuras de datos cuyos elementos están

16

4. Colas de prioridad

Tanto la pila como la cola son estructuras de datos cuyos elementos están ordenados conforme se insertaron.

La cola de prioridad es una estructura de datos en la que el ordenamiento intrínseco de los elementos determina los resultados de sus operaciones básicas

Tipos de colas de prioridad:

Cola de prioridad ascendente

Cola de prioridad descendente

Page 17: Estructura de Datos: Tema 2. Colasdtorres/cursos/estructuradedatos/Tema2-Colas.pdf · 4. Colas de prioridad Tanto la pila como la cola son estructuras de datos cuyos elementos están

17

4. Colas de prioridad

Cola de prioridad ascendente: Colección de elementos en la que pueden insertarse elementos de manera arbitraria y de la que puede eliminarse sólo el elemento menor.

Cola de prioridad descendente: Es similar a la de prioridad ascendente, pero sólo permite la eliminación del elemento mayor.

Page 18: Estructura de Datos: Tema 2. Colasdtorres/cursos/estructuradedatos/Tema2-Colas.pdf · 4. Colas de prioridad Tanto la pila como la cola son estructuras de datos cuyos elementos están

4. Colas de prioridad: Implementación dinámica de documentos a imprimir

typedef struct documento{

char nombre[20];

int prioridad; //ej. 1-3

struct documento * sig;

}Documento;

typedef struct{

Documento *ini;

Documento *fin;

}Cola;

18

Ejemplo, insertar los siguientes documentos:

{docto1, 1}, {docto2, 2}, {docto3, 1}, {docto4, 3}, {docto5, 2}, etc.

Page 19: Estructura de Datos: Tema 2. Colasdtorres/cursos/estructuradedatos/Tema2-Colas.pdf · 4. Colas de prioridad Tanto la pila como la cola son estructuras de datos cuyos elementos están

Casos de estudio

Sistema bancario (ventanilla)

Sistema de un supermercado (cola de cajas)

19

Page 20: Estructura de Datos: Tema 2. Colasdtorres/cursos/estructuradedatos/Tema2-Colas.pdf · 4. Colas de prioridad Tanto la pila como la cola son estructuras de datos cuyos elementos están

20

Referencias

1. Tenenbaum, Aaron & Langsam, Yedidyah & Augenstein, Moshe “Estructuras de Datos en C”. Prentice-Hall, México 1997.

2. Deitel & Deitel “Como programar en C/C++”. Prentice-Hall, México

3. Wirth, Niklaus “Algoritmos y estructura de Datos”. Prentice-Hall, México.