Estructura de Datos

Anuncio
17/04/2012
Estructura de Datos
Estructura de datos Colas
Temario Unidad II





2.1 Definición y operaciones
2.2 Implementación estática
2.3 Implementación dinámica
2.4 Colas de prioridad
2.5 Casos de estudio
1
17/04/2012
Definición
 Es una estructura de datos en la cual los
elementos se eliminan por uno de sus
extremos, llamado frente o cabeza, y se
añaden por el otro extremo, denominado final
o fondo. Las inserciones y eliminaciones se
realizan siguiendo la función de una estructura
FIFO (First In First Out).
 Las colas también son llamadas FIFO que
quiere decir el primero que entra es el primero
que sale.
Clasificación
 Colas simples: Se inserta por un sitio y se saca
por otro, en el caso de la cola simple se inserta por
el final y se saca por el principio. Para gestionar
este tipo de cola hay que recordar siempre cual es
el siguiente elemento que se va a leer y cual es el
último elemento que se ha introducido.
910
973
175
137 En este ejemplo el ultimo nodo es 137.
2
17/04/2012
… Clasificación
 Colas circulares: En las colas circulares se
considera que después del último elemento se
accede de nuevo al primero. De esta forma se
reutilizan las posiciones que hayan quedado vacías,
el final de la cola es a su vez el principio, creándose
un circuito cerrado.
...
an
a1
frente
a2
an...
final
1
… Clasificación
 Colas con prioridad: Las colas con prioridad se
implementan mediante listas o arreglos ordenados.
No interesa en este caso que salgan en el orden de
entrada sino con una prioridad que se le asigne.
 En el caso que existan varios elementos con la misma
prioridad saldrá primero aquel que primero llego
(FIFO).
3
17/04/2012
Ejemplos de colas
 Las colas de impresión, las colas de
atención a procesos, las colas circulares
que representan una red tipo anillo,
representaciones para problemas como el
de Joseph.
 La implementación al igual que las Pilas es
estática (vectores) o dinámica.
Cola simple
 Considerando la siguiente definición de tipos:
typedef struct nodo{
// estructura que define el nodo
tipo_elem dato;
struct nodo *siguiente;
} Nodo;
typedef struct {
Nodo *frente;
Nodo *frente;
} Cola;
4
17/04/2012
Cola simple
 Inserción
void insertar(Cola *cola,tipo_elem x) {
Nodo *nuevo;
nuevo =(Nodo *)malloc (sizeof(Nodo));
nuevo->dato=x;
nuevo->siguiente=nuevo;
// Hace que el nodo que almacena el nuevo valor apunte
hacia el mismo
if (colaVacia(*cola))
cola->frente = nuevo;
else
cola-final->siguiente = nuevo;
cola-final-> nuevo;
}
Cola simple
 Eliminación
void eliminar(Cola *cola){ // Se elimina el elemento que se encuentre al frente de la cola
Nodo *aux;
// aux es un nodo auxiliar que contendrá el nodo a eliminar
tipo_elem temp;
if (!colaVacia(*cola))
{ aux =cola->frente;
temp = cola ->frente -> dato;
cola ->frente = cola ->frente ->siguiente;
printf("\nElemento eliminado %c ",temp);
free(aux);
}
else
printf("\n Error al eliminar en cola vacia ");
}
5
17/04/2012
Cola circular
 Considerando la siguiente definición de tipos:
typedef struct nodo{
// estructura que define el nodo
tipo_elem dato;
struct nodo *siguiente;
} Nodo;
typedef Nodo *Cola;
Implementación
 Inserción
void insertar(Cola *cola,tipo_elem x) {
Nodo *nuevo;
nuevo =(Nodo *)malloc (sizeof(Nodo));
nuevo->dato=x;
nuevo->siguiente=nuevo;
// Hace que el nodo que almacena el nuevo valor apunte hacia el
mismo
if (!colaVacia(*cola))
{ nuevo->siguiente =(*cola)->siguiente;
(*cola)->siguiente = nuevo;
}
*cola =nuevo;
// El ultimo nodo ingresado en la cola siempre ser· al que apunte Cola
}
6
17/04/2012
Implementación
 Eliminación
void eliminar(Cola *cola){ // Se elimina el elemento que se encuentre al frente de la cola
Nodo *aux;
// aux es un nodo auxiliar que contendrá el nodo a eliminar
tipo_elem temp;
if (!colaVacia(*cola))
{ aux =(*cola)->siguiente;
temp= aux->dato;
if (aux ==(*cola))
(*cola)= NULL;
else
(*cola)->siguiente = aux->siguiente;
printf("\nElemento eliminado %c ",temp);
free(aux);
}
else
printf("\n Error al eliminar en cola vacia ");
}
Cola de prioridad
Una cola de prioridad es una cola a cuyos elementos
se les ha asignado una prioridad, de forma que el
orden en que los elementos son procesados sigue
las siguientes 2 reglas:
•El elemento con mayor prioridad es procesado
primero.
•Dos elementos con la misma
prioridad son procesados según el orden en que
fueron introducidos en la cola.
7
17/04/2012
Cola de prioridad
 Ejemplos:
 Colas de impresión, servicio de urgencias de un
hospital, atención a clientes preferenciales en un
banco, etc.
 Nota.-Hay una solución alternativa de implementación
usando árboles binarios pero dado el orden de temas para
el curso no se considerará en esta unidad. Las alternativas
de solución son con la estructura de datos lineal cola.
Métodos básicos para la representación de
colas de prioridad
1. Tener la cola siempre ordenada de acuerdo a las
prioridades de sus elementos y sacar cada vez el primer
elemento de ésta, es decir, el de mayor prioridad. En este
caso, cuando se introduce un elemento en la cola, debe
insertarse en el lugar correspondiente de acuerdo a su
prioridad.
2. Insertar los elementos siempre al final de la cola, y
cuando se va a sacar un elemento, buscar el que tiene
mayor prioridad.
Nota.- Se optará por usar el método (1), ya que la búsqueda de la
posición en la cual se inserta un nuevo elemento requiere menos
operaciones que la búsqueda del elemento que se saca para el caso
(2).
8
Descargar