Ir ao conteúdo
  • Cadastre-se

Fila de prioridade


edileyoliveira

Posts recomendados

Olá pessoal, eu preciso fazer um trabalho da matéria de estrutura de dados.

Eu preciso montar uma simulação de fila de impressão circular com prioridade, programada em C, eu ja tenho a fila circular funcinando numa boa, mas tem que colocar prioridades nela, primeiro que preciso que a fila seja ordenada com o método de ordenação de bolha, mas o professor quer que a fila seja sempre ordena sempre que for inserido novos intens, ele quer que seja ordena por ordem de nivel de usuario, e se houver dois usuarios com mesmo nivel, que tenha prioridade o que tiver o arquivo de menor tamanho.

Tipo eu não consegui entender métodos de ordenação porque eu faltei a aula, e mesmo lendo to tendo dificuldades porque o trampo não tá me dando tempo, ainda mais que tem que ordenar verificando dois campos do registro.

Alguem poderia me ajudar me passando o código de ordenação.

ou me explicando.

Ae esta minha fila circular, ela está funcionando 100%, inclusive foi um dos melhores códigos da sala...rsrsrs, zueira....

#include<stdio.h>
#include<stdlib.h>
#define MAX 10

struct fila{
int nivel;
int cod;
char desc[40];
float horas;
float tamanho;

}f[MAX];

int inicio,fim,total;

void menu(void);
void reinicializa(void);
void inserir(void);
void apaga(void);
void listar(void);


int main(void){
inicio=fim=total=0;
menu();
return 0;
}


void reinicializa(void){
inicio=fim=total=0;
printf("\n\n\t\tFila Reiniciada com Sucesso!!!\n\n");
system("pause");
}

void menu(void){
int op;
for(;{
system("cls");

printf("\n\t1 - Inserir");
printf("\n\t2 - Remover");
printf("\n\t3 - Listar");
printf("\n\t4 - Reiniciar Lista ");
printf("\n\t5 - Sair ");
printf("\n\tDigite a opcao desejada: ");
scanf("%d",&op);
switch(op){
case 1: inserir();
break;
case 2: apaga();
break;
case 3:listar();
break;
case 4:reinicializa();
break;
case 5: exit(0);
default:
system("cls");
printf("Opcao invalida\n\n");
system("pause");
}
}
}

void inserir(void){
system("cls");

if (total==MAX){

printf("\n\n\t\tFila de impressao cheia. Aguarde Liberacao!\n\n");
system("pause");
return;
}
else{
if (fim==MAX){
fim=0;
}

printf ("\tNivel do usuario: ");
scanf ("%d", &f[fim].nivel);
printf ("\tCodigo: ");
scanf ("%d", &f[fim].cod);
fflush(stdin);
printf ("\tDescricao: ");
fflush(stdin);
scanf ("%s",&f[fim].desc);
printf ("\thoras: ");
fflush(stdin);
scanf ("%f",&f[fim].horas);
fflush(stdin);
printf ("\tTamanho: ");
scanf ("%f", &f[fim].tamanho);
fim++;
total++;
printf("\n\tDados cadastrados com sucesso.\n\n");
system("pause");
}
}

void apaga(void) {
if (total==0){
system("cls");
printf("\n\n\t\tFila vazia!!!\n\n\n");
system("pause");
}
else{
if (inicio>=MAX)
{
inicio=0;
}
else{
inicio++;
}
total--;
printf("\n\n\t\tPrimeiro elemento da Fila eleminado com sucesso!!!\n");
system("pause");
}
}

void listar(void){
int i;
if (total==0){
system("cls");
printf("\n\n\t\tFila vazia!!!\n\n\n");
system("pause");
}
else{
if(inicio<fim){
system("cls");
printf("\n\n\n\n");
for(i=inicio;i<fim;i++){
printf ("\nNivel de usuario: %d\tCodigo: %d \tDescricao: %s \tHoras: %.2f \tTamanho: %.2f Kbs",f[i].nivel,f[i].cod,f[i].desc,f[i].horas,f[i].tamanho);
printf ("\n--------------------------------------------------------------------------");

}
getchar();
getchar();
}
else{
system("cls");
printf("\n\n\n\n");
for(i=inicio;i<MAX;i++){
printf ("\nNivel de usuario: %d\tCodigo: %d \tDescricao: %s \tHoras: %.2f \tTamanho: %.2f Kbs",f[i].nivel,f[i].cod,f[i].desc,f[i].horas,f[i].tamanho);
printf ("\n--------------------------------------------------------------------------");
} for(i=0;i<fim;i++){
printf ("\nNivel de usuario: %d\tCodigo: %d \tDescricao: %s \tHoras: %.2f \tTamanho: %.2f Kbs",f[i].nivel,f[i].cod,f[i].desc,f[i].horas,f[i].tamanho);
printf ("\n--------------------------------------------------------------------------");
}
getchar();
getchar();

}
}
}

Link para o comentário
Compartilhar em outros sites

bom nao verifiquei seu programa, mas posso te ajudar com a parte da ordenação. O metodo das bolhas é o pior metodo q existe, porém é o mais simples e o mais fácil de implementar e quebra o galho em listas pequenas

(1000 elementos é pequeno??) ele funciona assim, voce tera os termos que quer ordenar, e tera tambem uma variavel axiliar do mesmo tipo dos termos

voce vai usar um for pra percorrer o vetor e vai comparar os elementos dois a dois, se o 1º for maior que o segundo então você troca eles de lugar, feita ou nao a troca voce agora ira comparar o segundo com o terceiro, e depois o 3º com 4º e assim ate o fim por exemplo para ordenar o vetor v de n elementos

for(int j=0; j<n; j++)

for(int i=0; i<n-1; i++)

if(v>v[i+1]){

aux=v;

v=v[i+1];

v[i+1]=aux;

}

espero q entenda, qq coisa posta ae!

t+

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!