int main(){ Fila *fi; int z; fi = cria_fila(); int x = insere_fila(fi,2); x = insere_fila(fi,3); x = insere_fila(fi,4); x = insere_fila(fi,5); mostra(fi); int y = consulta_fila(fi,&z); //x = remove_fila(fi); fi = inverte_fila(fi); /* printf("Primeiro valor %d\n",z); printf("Tamanho da fila %d",tamanho(fi)); if(fila_cheia(fi) == 1){ printf("Esta cheia"); }else{ printf("Nao esta cheia!"); }*/ //x = verifica_ord(fi); return 0; }
int main ( int argc, char *argv[] ) { int comando, valor; int n, i; int flag[ 3 ]; int recebido; tipo_sacola data; while ( scanf ( "%d", &n ) != EOF ) { memset ( flag, 0, sizeof( flag ) ); data.comeco_fila = 0; data.final_fila = 0; data.indice_pilha = 0; data.indice_lista_prioridade = 0; for ( i=0; i<n; i++ ) { scanf( "%d %d", &comando, &valor ); /********************************************************* * Se o comando for 1, insere o elemento em todas as * * estruturas. * **********************************************************/ if ( comando == 1 ) { insere_fila ( valor, &data ); insere_pilha ( valor, &data ); insere_lista_prioridade ( valor, &data ); } /********************************************************* * Se o comando for 2, remove o elemento em todas as * * estruturas. * **********************************************************/ else { recebido = remove_fila ( &data ); /***************************************************** * Compara o valor obtido ao fazer a remoção das * * estruturas com o dado recebido. Se forem diferentes* * a flag deve ser 'ativada', identificando que o * * resultado não pode ser a estrutura correspondente. * ******************************************************/ if ( recebido != valor ) { flag[0] = 1; } recebido = remove_pilha ( &data ); if ( recebido != valor ) { flag[1] = 1; } recebido = remove_lista_prioridade ( &data ); if ( recebido != valor ) { flag[2] = 1; } } } /************************************************************* * No caso de todas as três flags terem sido ativadas, não * * pode ser nenhuma das três estruturas, portanto, impossível.* **************************************************************/ if ( flag[ 0 ] + flag[ 1 ] + flag[ 2 ] == 3 ) printf ( "impossible\n" ); /************************************************************* * No caso de terem sobrado duas flags não ativadas, pode * * duas estruturas diferentes, portanto, sem certeza * **************************************************************/ else if ( flag[ 0 ] + flag[ 1 ] + flag[ 2 ] < 2 ) printf ( "not sure\n" ); /************************************************************* * Se apenas uma flag não tiver sido ativada, é essa a * * estrutura utilizada. * **************************************************************/ else { if ( !flag[0] ) printf ( "queue\n" ); if ( !flag[1] ) printf ( "stack\n" ); if ( !flag[2] ) printf ( "priority queue\n" ); } } return 0; }
void ordenacaoExterna(int numerosArmazenados){ /* FILE *arqOrdenado; arqOrdenado = fopen("arqOrdenado.txt", "r"); //arquivo a ser ordenado*/ int i = 0; int w = 0; int z = 0; fila fp; // Fila de prioridade int *bs; // Buffer de saida tipo_buffer *be; // Buffer de entrada tipo_nodo aux,auxRetirada; int numeroRuns = numerosArmazenados/TAM_RUN; // Runs geradas int inserirBufferEntrada; if(numerosArmazenados%TAM_RUN > 0) // Se teve resto tem que gerar mais uma Run pro resto numeroRuns++; printf("\nQtd de Runs(50 chaves): %d",numeroRuns); gerar_runs(numeroRuns,numerosArmazenados); //Alocando memoria para os buffers bs = (int*)malloc(sizeof(int)*numeroRuns); be = (tipo_buffer*)malloc(sizeof(tipo_buffer)*numeroRuns); //Criando fila de prioridade fp = cria_fila(numeroRuns); //---------------------------------ADICIONAR ELEMENTOS NO BUFFER DE ENTRADA printf("\n\n2 - Adicionando elementos no buffer de entrada"); for (i=0;i<numeroRuns;i++){ be[i].posAtual=0; /* Somente para armazenar o posição corrente do arquivo. Para quando pegar novamente mais um elemento pegar na posição atual */ //Total de elementos que este buffer podera pegar da RUN // if( (i < numeroRuns || numeroRuns == 1) && numerosArmazenados >= 50 ) if(i!=numeroRuns-1 || (numerosArmazenados % TAM_RUN) == 0) be[i].totalElementos = TAM_RUN; // Run completa else be[i].totalElementos = numerosArmazenados % TAM_RUN; // Run com menos de TAM_RUM //Carregando os buffers de entrada e inserindo os itens de cada Run inserirBufferEntrada = inserirElementosBufferEntrada(be,i); if (!inserirBufferEntrada){ be[i].posAtualBuffer=-1; }else { aux.chave = be[i].chave[0]; aux.run = i; be[i].posAtualBuffer++; //printf("\nRecebendo aux.chave %d aux.run %d",aux.chave,aux.run); insere_fila(fp,aux,numeroRuns); // Coloca na fila o elemento de indice 0 do buffer de entrada } } //-----------------------------------INICIO DA ORDENAÇÃO EXTERNA printf("\n\n3 - Realizando ordenação externa"); w = 0; while (fila_vazia(fp)){ imprime_fila(fp); remove_fila(fp,&auxRetirada); printf("\nElemento retirado = %d do Buffer de Entrada %d ",auxRetirada.chave,auxRetirada.run); bs[w]=auxRetirada.chave; w++; //verifica se o buffer de saida esta cheio e imprime no arquivo resultado if (w==numeroRuns){ gravar_resultado(bs,w); w=0; } z=0; while (z<numeroRuns){ if (z==auxRetirada.run){ if (be[z].posAtualBuffer==TAM_BUFFER) if (!carregaBE(auxRetirada.run,be)){ be[z].posAtualBuffer=-1; printf("\nBuffer de entrada %d foi carregado!",auxRetirada.run); break; } if (be[z].posAtualBuffer < be[z].totalBuffer){ auxRetirada.run=z; auxRetirada.chave=be[z].chave[be[z].posAtualBuffer]; insere_fila(fp,auxRetirada,numeroRuns); be[z].posAtualBuffer++; printf("\nElemento inserido = %d no Buffer de Entrada %d ",auxRetirada.chave,auxRetirada.run); } break; } z++; }// fim while //getchar(); } //verifica se o buffer de saida possui algum elemento restante e salva no arquivo resultado if (w!=0) gravar_resultado(bs,w); //--------------------------------------------------- imprime_fila(fp); //Finalizando a fila de prioridade termina_fila(fp); printf("\n\Final da Ordenacao Externa"); //fclose(arqOrdenado); }
int main() { time_t hora; struct tm *timeinfo; int Nvoos; int Ndecolagens; int Npousos; char codigo_voo[7]; char tipo_voo; int combustivel_voo; int aviso_voo; int pista_voo = 1; char codigos[64][7] = {"VG3001", "JJ4404", "LN7001", "TG1501", "GL7602", "TT1010", "AZ1009", "AZ1008", "AZ1010", "TG1506", "VG3002", "JJ4402", "GL7603", "RL7880", "AL0012", "TT4544", "TG1505", "VG3003", "JJ4403", "JJ4401", "LN7002", "AZ1002", "AZ1007", "GL7604", "AZ1006", "TG1503", "AZ1003", "JJ4403", "AZ1001", "LN7003", "AZ1004", "TG1504", "AZ1005", "TG1502", "GL7601", "TT4500", "RL7801", "JJ4410", "GL7607", "AL0029", "VV3390", "VV3392", "GF4681", "GF4690", "AZ1020", "JJ4435", "VG3010", "LF0920", "AZ1065", "LF0978", "RL7867", "TT4502", "GL7645", "LF0932", "JJ4434", "TG1510", "TT1020", "AZ1098", "BA2312", "VG3030", "BA2304", "KL5609", "KL5610", "KL5611"}; srand(time(NULL)); //Gerador de número de vôos, pousos e decolagens Nvoos = geraRand (0, 64); Ndecolagens = geraRand (0, Nvoos); Npousos = Nvoos - Ndecolagens; int voos = 0; int dec = Ndecolagens; int pouso = Npousos; FILA fila = cria_fila(); for(voos = 1; voos <= Nvoos; voos++){ strcpy(codigo_voo, codigos[voos]); if(pouso > 0 && dec >0){ if(geraRand(0,1)){ tipo_voo = 'D'; dec--; combustivel_voo = geraRand (24, 48); pista_voo = ((voos-1)%3)+1; } else{ tipo_voo = 'P'; pouso--; combustivel_voo = geraRand (0, 12); if (combustivel_voo == 0) aviso_voo = 1; else aviso_voo = 0; pista_voo = ((voos - 1)%3) + 1; if(pista_voo == 3 && tipo_voo == 'P' && aviso_voo == 0){ pista_voo = ((voos)%3) + 1; } } } else if (pouso == 0 && dec !=0){ tipo_voo = 'D'; dec--; combustivel_voo = geraRand (24, 48); pista_voo = ((voos-1)%3) + 1; } else if (pouso != 0 && dec == 0){ tipo_voo = 'P'; pouso--; combustivel_voo = geraRand (0, 12); if (combustivel_voo == 0){ aviso_voo = 1; } else{ aviso_voo = 0; } pista_voo = ((voos - 1)%3) + 1; if(pista_voo == 3 && tipo_voo == 'P' && aviso_voo == 0){ pista_voo = ((voos)%3) + 1; } } insere_fila(fila, codigo_voo, tipo_voo, combustivel_voo, aviso_voo, pista_voo); } printf ("\n Aeroporto Internacional de Brasilia\n"); hora = time(NULL); timeinfo = localtime(&hora); printf(" Hora atual: %02d:%02d:%02d\n", timeinfo->tm_hour, timeinfo->tm_min, timeinfo->tm_sec); printf(" Fila de pedidos:\n"); printf(" Nvoos: %d\n", Nvoos); printf(" Ndecolagens: %d\n", Ndecolagens); printf(" Npousos: %d\n\n", Npousos); printf(" Fila designada (na ordem) por pistas:\n\n"); printf(" ******Pista 1:******\n Pousos:\n\n"); ver_fila(fila, 'P', 1); printf("\n Decolagens:\n\n"); ver_fila(fila, 'D', 1); printf("\n ******Pista 2:******\n Pousos:\n\n"); ver_fila(fila, 'P', 2); printf("\n Decolagens:\n\n"); ver_fila(fila, 'D', 2); printf("\n ******Pista 3:******\n Pousos:\n\n"); ver_fila(fila, 'P', 3); printf("\n Decolagens:\n\n"); ver_fila(fila, 'D', 3); printf("\n"); libera_fila (fila); return 0; }