Vous êtes sur la page 1sur 3

Unidad V.

Pilas y Colas
Qu son las colas?
Las colas son un grupo ordenado de elementos en el que los nuevos elementos se aaden por un
extremo (el final) y se quitan por el otro extremo (el frente). Las colas son de tipo FIFO (first in,
first out) primero que entra, primero que sale. La diferencia con las pilas es en el modo de
entrada ! salida de datos" en las colas se reali#an las inserciones al final de la lista, no al principio.
Encolar
void encolar(int dato){
nuevo=new nodo;
nuevo->elem=dato;
if(inicio==NULL){
nuevo->sig=NULL;
inicio=nuevo;
}
else{
aux=inicio;
while(aux->sig=NULL) !!recorre hasta el ultimo nodo
aux=aux->sig;
aux->sig=nuevo;!!conecta al ultimo con el nuevo
nuevo->sig=NULL;
}!!else
}
Desencolar
void desencolar(){
aux=inicio;
if(inicio==NULL) cout""#$ola vacia%%&n#;
else if(aux->sig==NULL) inicio=NULL;
else inicio=inicio->sig;
delete(aux);
}
Colas de prioridad
Una cola de prioridades es una estructura de datos en la 'ue los elementos se atienden en el orden
indicado (or una (rioridad asociada a cada uno% )i varios elementos tienen la misma (rioridad* se
atender+n de modo convencional seg,n la (osici-n 'ue ocu(en%
Encolar con prioridad
struct nodo{
int elem;
int (rioridad;
nodo .sig;
}.inicio=NULL* .nuevo* .aux* .ant;
void encolar/(riori(){
int dato* (riori;
cout""#0ngrese dato1 #;
cin>>dato;
cout""#0ngrese (rioridad1 #;
cin>>(riori;
nuevo=new nodo;
nuevo->elem=dato;
nuevo->(rioridad=(riori;
if(inicio==NULL){
nuevo->sig=NULL;
inicio=nuevo;
}
else{
aux=inicio;
while(aux=NULL){
if(aux->(rioridad>(riori) 2rea3;
ant=aux;
aux=aux->sig;
}
nuevo->sig=aux;!!siem(re se conecta con el aux 'ue es el 'ue le sigue
if(aux==inicio)!!si es menor 'ue la (rioridad del (rimer nodo ha4 ' renom2rar el inicio
inicio=nuevo;
else
ant->sig=nuevo;!!se conecta con el anterior
}!!else
}
Ejercicio
5ise6ar una cola de (rioridad en la cual se almacenen los datos de los (acientes del am2ulatorio 7
(edad* (eso* sexo)% Las (rioridades son las siguientes1 8% 9era edad :% ;m2ara<ada 9% Ni6o(a) 4 =%
$onsulta >utinaria% 5e acuerdo a estos datos calcular1 edad (romedio de las em2ara<adas* total de
mu?eres en consulta rutinaria 4 (romedio de (eso de los ni6os atendidos%
@include "iostream%h>
struct nodo{
int edad;
int (eso;
char sexo;
int (rioridad;
nodo .sig;
}.inicio=NULL* .nuevo* .aux* .ant;
void encolar/(riori(){
nuevo=new nodo;
cout""#0ngrese ;dad1 #;
cin>>nuevo->edad;
cout""#0ngrese (eso1 #;
cin>>nuevo->(eso;
cout""#0ngrese sexo1 #;
cin>>nuevo->sexo;
cout""#0ngrese (rioridad1 #;
cin>>nuevo->(rioridad;
if(inicio==NULL){
nuevo->sig=NULL;
inicio=nuevo;
}
else{
aux=inicio;
while(aux=NULL){
if(aux->(rioridad>nuevo->(rioridad) 2rea3;
ant=aux;
aux=aux->sig;
}
nuevo->sig=aux;!!siem(re se conecta con el aux 'ue es el 'ue le sigue
if(aux==inicio)!!si es menor 'ue la (rioridad del (rimer nodo ha4 ' renom2rar el
inicio=nuevo;
else
ant->sig=nuevo;!!se conecta con el anterior
}!!else }
void calculos(){
int cant/em=A* tot/edad/em=A* (rom/edad/em=A* cant/n=A* tot/edad/n=A*
(rom/edad/n=A* cant/mu=A;
aux=inicio;
while(aux=NULL){
if(aux->(rioridad==:){!!em2ara<adas
cant/emBB;
tot/edad/emB=aux->edad;
}
if(aux->(rioridad==9){!!ni6os(a)
cant/nBB;
tot/edad/nB=aux->edad;
}
if((aux->(rioridad===)CC ((aux->sexo==DED)FF(aux->sexo==DfD))) cant/muBB;
aux=aux->sig;
}
(rom/edad/em=tot/edad/em!cant/em;
(rom/edad/n=tot/edad/n!cant/n;
cout""#Gromedio de ;dad de ;m2ara<adas1 #""(rom/edad/em""#&n#;
cout""#Gromedio de ;dad de Ni6os(as)1 #""(rom/edad/n""#&n#;
cout""#Hotal mu?eres atendidas en consulta rutinaria1 #""cant/mu""#&n#;
}
void main(){
for (int i=8; i"==; iBB)
encolar/(riori();
calculos();}

Vous aimerez peut-être aussi