Esempio n. 1
0
void desembarque(Pilha* p){   
   Fila* f = getfila();
   while(!pilha_vazia(p)){
      Mala* m = pilha_pop(p);
      fila_insere(f,m);     
   }
   imprime_fila(f);
   pilha_libera(p);
   fila_libera(f);
   printf("\nDesembarque Realizado com Sucesso!\n");
}
Esempio n. 2
0
/* teste problema 1.1 */
void teste_11()
{
	fila *f;
	pilha *p;

	f = fila_nova(10);
	
	fila_push(f, "F");
	fila_push(f, "R");
	fila_push(f, "O");
	fila_push(f, "G");

	printf("Fila: ");
	imprime_fila(f);

	p = fila_transforma(f);
	
	printf("Pilha: ");
	imprime_pilha(p);
	
	fila_apaga(&f);
	pilha_apaga(p);
}
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);
}