estructura de datos: tema 2. colasdtorres/cursos/estructuradedatos/tema2-colas.pdf · 4. colas de...
TRANSCRIPT
![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](https://reader034.vdocuments.net/reader034/viewer/2022042209/5eadb95fde8ec6065705eb40/html5/thumbnails/1.jpg)
Estructura de DatosTema 2. Colas
Presenta: David Martínez Torres
Universidad Tecnológica de la Mixteca
Instituto de Computación
Oficina No. 37
![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](https://reader034.vdocuments.net/reader034/viewer/2022042209/5eadb95fde8ec6065705eb40/html5/thumbnails/2.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042209/5eadb95fde8ec6065705eb40/html5/thumbnails/3.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042209/5eadb95fde8ec6065705eb40/html5/thumbnails/4.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042209/5eadb95fde8ec6065705eb40/html5/thumbnails/5.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042209/5eadb95fde8ec6065705eb40/html5/thumbnails/6.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042209/5eadb95fde8ec6065705eb40/html5/thumbnails/7.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042209/5eadb95fde8ec6065705eb40/html5/thumbnails/8.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042209/5eadb95fde8ec6065705eb40/html5/thumbnails/9.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042209/5eadb95fde8ec6065705eb40/html5/thumbnails/10.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042209/5eadb95fde8ec6065705eb40/html5/thumbnails/11.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042209/5eadb95fde8ec6065705eb40/html5/thumbnails/12.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042209/5eadb95fde8ec6065705eb40/html5/thumbnails/13.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042209/5eadb95fde8ec6065705eb40/html5/thumbnails/14.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042209/5eadb95fde8ec6065705eb40/html5/thumbnails/15.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042209/5eadb95fde8ec6065705eb40/html5/thumbnails/16.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042209/5eadb95fde8ec6065705eb40/html5/thumbnails/17.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042209/5eadb95fde8ec6065705eb40/html5/thumbnails/18.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042209/5eadb95fde8ec6065705eb40/html5/thumbnails/19.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042209/5eadb95fde8ec6065705eb40/html5/thumbnails/20.jpg)
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.