Esempio n. 1
0
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;
}
Esempio n. 3
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);
}
Esempio n. 4
0
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;   
}