Professional Documents
Culture Documents
Estructuras de Datos
DEFINICION
Abunda este concepto, en la vida cotidiana
Final
Final
Frente
Frente
Como funciona
Se puede decir que la cola tiene 2 extremos
FRENTE, Y FINAL
Todo el que llega se ubica al final de la cola
OPERACIONES BASICAS
Cola Q;
EnColar
DesEnColar
As como en la pila
SUBDESBORDAMIENTO DE LA COLA
COLAS: OPERACIONES
Cola QCrear()
QEliminar(Cola q)
QDesEnColar(Cola q)
QFinal(Cola q)
QFrente(Cola q)
Recibe una cola y elimina todos los elementos que en ella existen, para dejarla vaca
QEstaVacia(Cola q)
QEnColar(Cola q, elemento)
IMPLEMENTACIONES
Una cola es
Contigua(Estatica)
Enlazada(Dinamica)
RECORDEMOS
ENTONCES..
return(LSCont_EstaLlena(Q));
}
bool QEstaVacia(Cola Q){
return(LSCont_EstaVacia(Q));l
}
bool QEncolar(Cola *Q)(
return LSCont_InsertarNodoInicio(Q);
}
return(LSCont_ConsultarUltimo(Q));
}
Generico QFrente(Cola Q){
return(LSCont_ConsultarPrimero(Q));
}
Generico QDesEnColar(Cola *Q){
return LSCont_SacarNodoFinal(Q);
}
Ya no se
pueden
insertar
mas
element
os,
aunque
hay
espacio
atrs!
Final
Final
Final
Frente
Frente
Frente
MAX = 7
LSCONT: CAMBIOS
bool LSCont_EstaLlena(LSCont
L){
return(L.Final == MAX-1);
}
bool LSCont_EstaVacia(LSCont
L){
return(L.Frente < L.Final);l
}
bool LSCont_InsertarNodoUltimo(
LSCont *L, Generico G){
Generico *gfinal;
if(!LSCont_EstaLlena(*L)){
L->Final = L->Final++);
gfinal = ArrayU_Seleccionar(L>Datos,
L->Final);
gfinal = G;
return TRUE;
}else
return FALSE;
Generico LSCont_ConsultarUltimo(LSCont L)
{
return(*ArrayU_Seleccionar(L.Datos,
L.Final);
}
Generico LSCont_ConsultarPrimero(LSCont
L){
return(*ArrayU_Seleccionar(L.Datos,
L.Frente);
}
Generico
LSCont_SacarNodoPrimero(LSCont *L){
Generico tmp_frente;
if(!LSCont_EstaVacia(*L)){
tmp_frente =
LSCont_ConsultarPrimero(L);
q->Frente ++;
return(tmp_frente);
}
}
COMO RESOLVER EL
PROBLEMA
Como vimos esta estrategia no es optima, se desperdicia espacio libre
El problema es al DesEnColar elementos
Usando arreglos lineales, hay dos posibles soluciones:
Frente
El
Final
llego
a su
limite
Final
Frente Final
Frente
Frente
Frente
FinalFinal
FinalFinal Final
C
A
B
D
C
B
D
C
DesEnCola(q);
DesEnCola(q);
C
A
D
B
C
E
EnCola(q,D);
DesEnColar(q)
;
DesEnCola(q);
EnColar(q,E);
ARREGLOS CIRCULARES
2
3
Y COMO FUNCIONARIA?
Frente Frente
Final
Final Final Final Final
Frente
B C
D E
Final
Final
Frente
Frente
Final
AG
Final
E
D
Al encolar el
final se mueve
al siguiente
Al desencolar el
frente se
mueve al
siguiente
Frente
Final
Que hacer?
Final
Frente
Si el ndice == MAX.-1 entonces
siguiente = ndice+1
Frente
Final
La condicin para
Cola Vaca es igual
que para Cola
Llena, que hacer?
Final
Final
2
3
siguiente = 0
Si no
Frente
Final
LSCONT:
IMPLEMENTACION
bool LSCont_EstaLLena(LSCont L){
return(Siguiente(Siguiente(L.Final))==L.Frente);
}
bool LSCont_EstaVacia(LSCont *L){
return(Siguiente(L.Final))==L.Frente);
}
Generico LSCont_CoonsultarPrimero(LSCont L){
return(*ArrayU(L.Datos, L.Frente);
}
Generico LSCont_CoonsultarUltimo(LSCont L){
return(*ArrayU(L.Datos, L.Final);
}
int Siguiente(int indice, int max){
if(indice == max-1) return 0;
return indice+1;
}
return(LSE_EstaVacia(Q));l
}
bool QEncolar(Cola *Q)(
return LSE_InsertarNodoInicio(Q);
}
return(LSE_ConsultarUltimo(Q));
}
LSE_nodo* QFrente(Cola Q){
return(LSE_ConsultarPrimero(Q));
}
LSE_nodo * QDesEnColar(Cola *Q){
return LSE_SacarNodoFinal(Q);
}
TDA COLAS DE
PRIORIDAD
En las colas normales
Prioridad
El orden de atencin, no esta dado solo por el orden de llegada
Cada elemento, tendr asociado una cierta prioridad
Cada elemento ser procesado, segn su prioridad
TIPOS DE COLAS DE
PRIORIDAD
De Prioridad Ascendente
De Prioridad Descendente
Enteros, Reales
Estructuras,
DESENCOLAR EN COLAS
DE PRIORIDAD
Y luego sacarlo
Cada prioridad tendr un conjunto de elementos que se comportara como una cola
IMPLEMENTACION
ESTATICA
La insercin contempla
IMPLEMENTACION ESTATICA:
ARREGLOS
typedef struct{
int numero;
//todo lo que defina a una prioridad
Cola Q;
}Cola_Prioridad;
Luego tendremos un
Arreglo de Prioridades
IMPLEMENTACION
DINAMICA: LISTA SIMPLE
Para encolar:
Para desencolar:
IMPLEMENTACION
DINAMICA
Al encolar:
Al desencolar:
Frente
Final
header
P1
I11
P2
I21
I12
I13
P3
last
P4
typedef struct{
//Informacion
//Prioridad
Cola *Q;
}Cola_Prioridad;
I41
I42