Você está na página 1de 2

Ali Mohamad Termos

Prof Alessandra

Exercícios – Fila de prioridades

1. Defina, usando suas palavras, a diferença entre fila e fila de prioridades.


Fila é uma estrutura de dados do tipo First-In, First-Out; portanto o elemento que
entrar na fila primeiro, sairá primeiro; no entanto, fila de prioridade é ordenada
pela prioridade de cada elemento, sendo que o de maior prioridade será o primeiro
da fila, mas da mesma forma que na fila, o primeiro elemento da fila será o
primeiro a sair.

2. Defina, usando suas palavras, o que é uma estrutura do tipo fila de prioridade.
Fila de prioridade é ordenada pela prioridade de cada elemento, sendo que o de
maior prioridade será o primeiro da fila, e o primeiro elemento da fila será sempre
o primeiro a sair.

3. Liste 4 situações em que uma fila de prioridades pode ser usada.


Agendamento de tarefas,
Escalonamento de processos em algoritmos de busca, Gerenciamento de eventos em um
sistema de tempo real, Clustering de dados em aprendizado de máquina.

4. Implemente uma função que receba uma fila de prioridades e a inverta (o elemento
de maior prioridade passa a ter a menor).

int inverter_filaprio(Filaprio* fp){


if(fp==NULL)
return 0;
int i;
Filaprio* aux;
for (i = 0; i < fp->quant; i++) {
fp->dados[i].prio = -fp->dados[i].prio;
}
for (i = 0; i < fp->quant / 2; i++) {
aux = &(fp->dados[i]);
fp->dados[i] = fp->dados[fp->quant - i - 1];
fp->dados[fp->quant - i - 1] = *aux;
}
free(aux);
return 1;
}

5. Implemente uma função que copie os elementos de uma fila de prioridades F1 para
uma fila F2.

int copiar_filaprio(const Filaprio* f1, Filaprio* f2){


if(f1==NULL)
return 0;
int i;
f2 = (Filaprio*)malloc(f1->quant * sizeof(Filaprio));
f2->quant = f1->quant;
for (i = 0; i < f1->quant; i++) {
f2->dados[i] = f1->dados[i];
}
return 1;
}

6. Implemente uma função pra unir filas de prioridades. A função receberá duas
filas de prioridades (F1 e F2) e o resultado da união deve ser colocado em F1 SEM
REPETIÇÕES. A Fila F2 deve ficar vazia.

int unir_filaprio(Filaprio* f1, Filaprio* f2){


if(f1==NULL)
return 0;
int i, j;
int duplicado;
for(i = 0; i < f2->quant; i++){
duplicado = 0;
for(j = 0; j < f1->quant; j++){
if(f2->dados[i].nome == f1->dados[j].nome && f2->dados[i].prio == f1-
>dados[i].prio){
duplicado = 1;
break;
}
}
if(duplicado!=1){
f1->quant++;
f1->dados = (Filaprio*)realloc(f1->dados, f1->quant *
sizeof(Filaprio));
f1->dados[f1->quant - 1] = f2->dados[i];
}
}
free(f2->dados);
f2->quant = 0;
return 1;
}

Você também pode gostar