Example #1
0
int main(){
    Fila* f;
    int tam, op;
     
    P("Informe o tamanho da fila circular: ");
    scanf("%d", &tam);
     
    f = criaFila(tam);
     
    do{
        system("cls");
        P("Escolha uma das opcoes abaixo --\n");
        P("\t1. Inserir um elemento na fila circular;\n");
        P("\t2. Remover um elemento da fila circular;\n");
        P("\t3. Fila vazia ?\n");
        P("\t4. Mostrar a fila circular;\n");
        P("\t5. Sair.\n");
        P("Resposta escolhida: ");
        scanf("%d", &op);
          
        switch(op){
            case 1:{
                int valor;
                  
                P("Digite o valor a ser inserido na fila circular: ");
                scanf("%d", &valor);
                    
                insereFila(f, valor);
            }
            break;           
            case 2: {
                if(filaVazia(f))
                    P("Fila vazia.\n");
                else
                    printf("Valor removido: %d.\n", removeFila(f));
                    getch();
            }
            break;
            case 3: {
                if(filaVazia(f))
                    P("Fila vazia.\n");
                else
                    P("Fila nao esta vazia.\n");
                    getch();
            }
            break;
            case 4: mostraFila(f);
            break;
            case 5: exit(0);
            break;
            default : {
                P("Opcao invalida.\n");
                getch();
            }
            break;
        }
    }while(op != 5);
    getch();
    return 0;
}
Example #2
0
int main()
{
    tfila novo;
    int opcao,num;
    no *aux;

    criaFila(&novo);

    do
    {
        system("cls");
        printf("->Fila Encadeada\n");
        printf("1 - Enfileirar\n2 - Desenfileirar\n3 - Imprimir Fila\n4 - Busca Fila\n0 - SAIR\nDigite uma opcao: ");
        scanf("%d",&opcao);

        switch(opcao)
        {
            case 0:
                while(novo.cont > 0)
                    free(desenfileirar(&novo));
                opcao = 0;
            break;

            case 1:
                printf("Digite um numero: ");
                scanf("%d",&num);
                enfileirar(&novo,num);
            break;

            case 2:
                aux = desenfileirar(&novo);
                if(aux != NULL){
                    printf("[%d] Removido\n",aux->conteudo);
                    free(aux);
                }
                system("pause>NULL");
            break;

            case 3:
                imprimeFila(&novo);
                system("pause>NULL");
            break;

            case 4:
                printf("Digite um numero: ");
                scanf("%d",&num);
                buscaFila(&novo,num);
                system("pause>NULL");
            break;

            default:
                printf("Digite uma opcao valida!");
                system("pause>NULL");
        }
    }while(opcao != 0);
}
Example #3
0
no *desenfileirar(tfila *f){
    no *aux = NULL;
    if(!filaVazia(*f)){
        aux = f->inicio;
        if(f->inicio->proximo == NULL)
            criaFila(f);
        else{
            f->inicio = (f->inicio)->proximo;
            f->cont--;
        }
    }
    return aux;
}
void buscaLargura(Grafo g, int partida)
{
	int i, v, a, w;
	Fila fila = criaFila();
	Lista listaBrancos = criaLista();
	Lista listaPretos = criaLista();
	Lista listaVisitados = criaLista();

	for(i = GVprimeiroVertice(g); i != 0; i = GVproximoVertice(g, i))
	{
		insereNaLista(listaBrancos, i);
	}

	printf("Todas os vértices estão brancos.\n");
	printf("Nenhuma aresta foi visitada.\n");

	v = partida;
	printf("O vertice %d está cinza.\n", v);
	insereFila(fila, v);
	retiraLista(listaBrancos, pegaPosLista(listaBrancos, v));
	
	while(!vaziaFila(fila))
	{
		v = retiraFila(fila);
		printf("Vertice %d ativado.\n", v);
		for(a = GAprimaSaida(g,v); a != 0; a = GAproxSaida(g,v,a))
		{
			insereNaLista(listaVisitados, a);
			printf("A aresta %d foi visitada.\n", a);
			w = GVvizinho(g,a,v);
			if(existeNaLista(listaBrancos, w))
			{
				insereFila(fila, w);
				printf("O vertice %d está cinza.\n", w);
				retiraLista(listaBrancos, pegaPosLista(listaBrancos, w));
			}
		}
		insereNaLista(listaPretos, v);
		printf("O vertice %d está preto.\n", v);
		printf("Vertice %d desativado.\n", v);
	}
	destroiLista(listaBrancos);
	destroiLista(listaPretos);
	destroiFila(fila);
}
Example #5
0
void escolhe(int resposta, node* Fila)
{
    switch(resposta)
    {
        case 0:
            limpaFila(Fila);
            break;
        case 1:
            exibeFila(Fila);
            break;
        case 2:
            novoFinal(Fila);
            break;
        case 3:
            removePrimeiro(Fila);
            break;
        case 4:
            criaFila(Fila);
            break;
        default:
            puts("\nOpção inválida! Verifique novamente as opções apresentadas.");
    }
}
Example #6
0
int main(void)
{
    setlocale(LC_ALL, "Portuguese");
    node* Fila = (node*) malloc(sizeof(node));

    if(!Fila)
    {
        puts("\nNão há memória suficiente!");
        exit(1);
    }
    else
    {
        criaFila(Fila);
        int resposta;
        do
        {
            resposta = obtemResposta();
            escolhe(resposta, Fila);
        }while(resposta);
    }
    free(Fila);
    return 0;
}
Example #7
0
void cria_socket_externo(int *vetorPortas) {
	int l;
	 
	//Criando socket tcp para esperar conexoes
	if ((servSockExt = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP))<0){
		perror("criacao socket interno falhou");
		exit(1);
	}
	//printf("socket externo criado... %d\n", servSockExt);

	//Construindo endereco de conexao
	memset(&echoServAddrExt, 0, sizeof(echoServAddrExt));
	echoServAddrExt.sin_family = AF_INET;
	echoServAddrExt.sin_addr.s_addr = htonl(INADDR_ANY);
	echoServAddrExt.sin_port = htons(vetorPortas[0]);

	//Bind ao endereco local
	if (bind(servSockExt, (struct sockaddr *)&echoServAddrExt, sizeof(echoServAddrExt))<0) {
		perror("bind externo falhou");
		exit(1);
	}
	//printf("bind externo feito...\n");
	
	//Fazendo listen
	if (listen(servSockExt,5)<0) {
		perror("listen externo falhou");
		exit(1);
	}
	//printf("listen externo feito\n");
	
	//Criacao da fila de mensagens
	fila *q_ext;
	q_ext = criaFila();

	//Inicializa vetor de semaforos
	int z;
	for(z=0;z<NUM_PROCS;z++) {
		sem[z] = 1;
	}

	//Esperando conexoes com accept
	while(1) {
		
		inf *mens_ext;
		
		sprintf(echoBuffer,"");
		
		printf("esperando conexao externa\n");
		clntLen = sizeof(echoClntAddrExt);
		if((clntSockExt = accept(servSockExt, (struct sockaddr *)&echoClntAddrExt, &clntLen))<0) {
			perror("accept externo falhou");
			exit(1);
		}
		
		//printf("Tratando cliente %s\n", inet_ntoa(echoClntAddrExt.sin_addr));
		recv(clntSockExt, echoBuffer, sizeof(echoBuffer), 0);
				
		sscanf(echoBuffer,"%d %d %d %d",&garfo,&idf,&msg,&rel);
		
		//printf("Sou externo e fiz o sscanf %d %d %d %d\n", garfo, idf, msg, rel);

//	printf("Sou externo e recebi essa msg do interno %s\n",echoBuffer);
		mens_ext = criarInfo(garfo, idf, msg, rel);
		sleep(1);
		
// 		printf("Sou externo e criei o info %d %d %d %d\n",mens_ext->garfo,mens_ext->idf, mens_ext->msg, mens_ext->rel);
		
		//atualiza o relogio
		relogio++;
		rel = max(relogio, rel);
		mens_ext->rel = rel;

		//switch de tipo de msg
		if((mens_ext->msg == POP) || (mens_ext->msg == VOP)) {
			
			//Insere o nodo na fila de requisicoes
			insere(q_ext,mens_ext);
// 			printf("Sou externo e vou inserir essa mensagem na fila %d %s %d\n", mens_ext->idf, mens_ext->msg, mens_ext->rel);
			
			//Broadcast para todos os outros
			sprintf(echoBuffer,"");
			sprintf(echoBuffer,"%d %d %d %d",garfo,idf,ACK,rel);
//			printf("Sou externo e vou fazer broadcast dessa mensagem %s\n",echoBuffer);
			
			sleep(1);
			int k=1;
			for(k = 1; k<NUM_PROCS; k++) {	
				cria_cliente(vetorPortas[k],echoBuffer);
			}
			
			//Atualiza o relógio 
			relogio++;
			rel = max(relogio, rel);
			mens_ext->rel=rel;
			
			//Teste de verificacao da fila
// 			printf("----fila----\n");
// 			imprimeFila(q_ext);
// 			printf("----fila----\n");
			
		}
		else if(mens_ext->msg == REQP) {
			//Insere o nodo na fila de requisicoes
			mens_ext->msg = POP;
			insere(q_ext,mens_ext);
			printf("CHEGOU!\n");
			//printf("Sou externo e vou inserir essa mensagem na fila %d %d %d\n", mens_ext->idf, mens_ext->msg, mens_ext->rel);
			
			//Broadcast para todos os outros
			sprintf(echoBuffer,"");
			sprintf(echoBuffer,"%d %d %d %d",garfo,idf,POP,rel);
// 			printf("Sou externo e vou fazer broadcast dessa mensagem %s\n",echoBuffer);
			
			sleep(1);
			int k;
			for(k = 1; k<NUM_PROCS; k++) {
				cria_cliente(vetorPortas[k],echoBuffer);
			}
			
			//Atualiza o relogio
			relogio++;
			rel = max(relogio, rel);
			mens_ext->rel=rel;
			
			//Teste de verificacao da fila
// 			printf("----fila----\n");
// 			imprimeFila(q_ext);
// 			printf("----fila----\n");
		     
		     }
		     else if(mens_ext->msg == REQV){
			    
			    
		            //Insere o nodo na fila de requisicoes
			    mens_ext->msg = VOP;
			    insere(q_ext,mens_ext);
			    //printf("Sou externo e vou inserir essa mensagem na fila %d %d %d\n", mens_ext->idf, mens_ext->msg, mens_ext->rel);
			    
			    //Broadcast para todos os outros
			    sprintf(echoBuffer,"");
			    sprintf(echoBuffer,"%d %d %d %d",garfo,idf,VOP,rel);
// 			    printf("Sou externo e vou fazer broadcast dessa mensagem %s\n",echoBuffer);
			    
			    sleep(1);
			    int k;
			    for(k = 1; k<NUM_PROCS; k++) {
				    cria_cliente(vetorPortas[k],echoBuffer);
			    }
			    
			    //Atualiza o relogio
			    relogio++;
			    rel = max(relogio, rel);
			    mens_ext->rel=rel;
			
			    //Teste de verificacao da fila
// 			    printf("----fila----\n");
// 			    imprimeFila(q_ext);
// 			    printf("----fila----\n");
			  }
			  else 
			  {
			    printf("Recebi ACK!\n");  
			    limpaFila(q_ext);
			      
			  };
		
	}	
}
Example #8
0
void testeFila () {
    
    //Define o tamanho maximo da fila
    int NMAX = 100;
    
    //Inicializa o vetor onde a fila sera armazenada
    dado *fila = malloc(sizeof(dado) * NMAX);
    //Cria os indicadores de inicio e fim
    int inicio, fim;
    
    //Inicializa a fila
    criaFila(fila, NMAX, &inicio, &fim);
    
    //Insere 2 elementos
    insereFila(fila, &inicio, &fim, 3, NMAX);
    insereFila(fila, &inicio, &fim, 10, NMAX);
    
    //Exibe a fila atual
    exibeFila(fila, inicio, fim);
    
    //Desempilha um elemento e imprime
    dado desempilhado;
    desempilhaFila(fila, &inicio, &fim, &desempilhado);
    
    printf("\nElemento desempilhado: %d\n", desempilhado);
    
    //Mostra a nova fila
    exibeFila(fila, inicio, fim);
    
    printf("\nForcando underflow:\n");
    //Forca underflow
    while (desempilhaFila(fila, &inicio, &fim, &desempilhado) == OK) {
        printf("    Desempilhei alguem...\n");
    }
    
    printf("    Underflow!\n");
    
    //Mostra a fila apos o overflow
    exibeFila(fila, inicio, fim);
    
    printf("\nVou empilhar para ver se ainda funciona:\n");
    
    //Empilha coisas para ver se ainda funciona
    if (insereFila(fila, &inicio, &fim, 10, NMAX)==OK) printf("    Tudo ok!\n");
    
    //Mostra a fila apos insercao
    exibeFila(fila, inicio, fim);
    
    printf("\nForcando Overflow!\n");
    //Empilha ate ter overflow
    while (insereFila(fila, &inicio, &fim, 0, NMAX) == OK);
    
    printf("    Overflow!\n");
    //Se quiser ver:
    //exibeFila(fila, inicio, fim);
    
    printf("\nDesempilhando um elemento e tentando reempilhar:\n");
    //Desempilha um elemento e tenta empilhar outro:
    desempilhaFila(fila, &inicio, &fim, &desempilhado);
    if (insereFila(fila, &inicio, &fim, 0, NMAX) == OK) {
        printf("    Empilhado com sucesso.\n");
    } else {
        printf("    Ueh... Pq nao empilhou?\n");
    }
    
    //O empilhamento falou por causa da implementacao linear da fila.
    //Observe o processo ate agora:
    /*
     
     Inicial:   Empilhamento     Empilhamento      Desempilhamento
     ||       -> |elm1|    ->  |elm1|elm2|     ->   |elm2|
     inicio = fim   inic; fim+1   inicio   fim+2      inic+1 fim+2
     */
    
    //Ao desempilharmos, nao mudamos o incide de 'fim', mas sim apenas o indice de 'inicio'
    //Isso faz com que a fila ainda pareca cheia quando se tenta empilhar um elemento, mesmo
    //que haja espaco no comeco do vetor.
    
    //Isso motiva a implementacao circular das filas (Veja exemplo).
    
}
Example #9
0
int main(){
	int selector = 0;
	struct carta *primeira, *primeiranova;
	struct dados *dados;
	struct deck jogador1, jogador2, aux;	

	primeira = malloc(sizeof(struct carta));
	primeiranova = malloc(sizeof(struct carta));
	dados = malloc(sizeof(struct dados));
	dados->prox = NULL;

	while(1){
		printf("Selecione a opcao desejada:\n1)Simular um jogo\n2)Simular 5 jogos(opcional 1)\n3)Simular 5 jogos com detalhes(opcional 3)\n4)Sair\n");
		scanf("%d", &selector);
		getchar();

		criaFila(&jogador1);
		criaFila(&jogador2);
		criaFila(&aux);

		switch(selector){
			case 1:
				printf("Simulacao iniciada\n\n");
				geraBaralho(primeira);
				primeiranova = embaralha(primeira);
				distribui(&jogador1, &jogador2, primeiranova);
				duelo(&jogador1, &jogador2, &aux, dados);
				free(dados);
				dados = malloc(sizeof(struct dados));

				printf("\nPressione qualquer tecla para continuar...\n");
				getchar();

				break;

			case 2:
				printf("Simulacao 1 iniciada\n");
				geraBaralho(primeira);
				primeiranova = embaralha(primeira);
				distribui(&jogador1, &jogador2, primeiranova);
				duelo(&jogador1, &jogador2, &aux, dados);

				printf("\nPressione qualquer tecla para continuar...\n");
				getchar();


				//Zera filas
				criaFila(&jogador1);
				criaFila(&jogador2);
				criaFila(&aux);

				printf("Simulacao 2 iniciada\n");
				geraBaralho(primeira);
				primeiranova = embaralha(primeira);
				distribui(&jogador1, &jogador2, primeiranova);
				duelo(&jogador1, &jogador2, &aux, dados);

				printf("\nPressione qualquer tecla para continuar...\n");
				getchar();


				//Zera filas
				criaFila(&jogador1);
				criaFila(&jogador2);
				criaFila(&aux);

				printf("Simulacao 3 iniciada\n");
				geraBaralho(primeira);
				primeiranova = embaralha(primeira);
				distribui(&jogador1, &jogador2, primeiranova);
				duelo(&jogador1, &jogador2, &aux, dados);

				printf("\nPressione qualquer tecla para continuar...\n");
				getchar();


				//Zera filas
				criaFila(&jogador1);
				criaFila(&jogador2);
				criaFila(&aux);

				printf("Simulacao 4 iniciada\n");
				geraBaralho(primeira);
				primeiranova = embaralha(primeira);
				distribui(&jogador1, &jogador2, primeiranova);
				duelo(&jogador1, &jogador2, &aux, dados);

				printf("\nPressione qualquer tecla para continuar...\n");
				getchar();


				//Zera filas
				criaFila(&jogador1);
				criaFila(&jogador2);
				criaFila(&aux);

				printf("Simulacao 5 iniciada\n");
				geraBaralho(primeira);
				primeiranova = embaralha(primeira);
				distribui(&jogador1, &jogador2, primeiranova);
				duelo(&jogador1, &jogador2, &aux, dados);

				printf("A media de jogadas foi %d jogadas\n", mediaJogadas(dados));
				free(dados);
				dados = malloc(sizeof(struct dados));
				
				printf("\nPressione qualquer tecla para continuar...\n");
				getchar();

				break;

			case 3:
				printf("Simulacao 1 iniciada\n");
				geraBaralho(primeira);
				primeiranova = embaralha(primeira);
				distribui(&jogador1, &jogador2, primeiranova);
				duelo(&jogador1, &jogador2, &aux, dados);

				printf("\nPressione qualquer tecla para continuar...\n");
				getchar();


				//Zera filas
				criaFila(&jogador1);
				criaFila(&jogador2);
				criaFila(&aux);

				printf("Simulacao 2 iniciada\n");
				geraBaralho(primeira);
				primeiranova = embaralha(primeira);
				distribui(&jogador1, &jogador2, primeiranova);
				duelo(&jogador1, &jogador2, &aux, dados);

				printf("\nPressione qualquer tecla para continuar...\n");
				getchar();


				//Zera filas
				criaFila(&jogador1);
				criaFila(&jogador2);
				criaFila(&aux);

				printf("Simulacao 3 iniciada\n");
				geraBaralho(primeira);
				primeiranova = embaralha(primeira);
				distribui(&jogador1, &jogador2, primeiranova);
				duelo(&jogador1, &jogador2, &aux, dados);

				printf("\nPressione qualquer tecla para continuar...\n");
				getchar();


				//Zera filas
				criaFila(&jogador1);
				criaFila(&jogador2);
				criaFila(&aux);

				printf("Simulacao 4 iniciada\n");
				geraBaralho(primeira);
				primeiranova = embaralha(primeira);
				distribui(&jogador1, &jogador2, primeiranova);
				duelo(&jogador1, &jogador2, &aux, dados);

				printf("\nPressione qualquer tecla para continuar...\n");
				getchar();


				//Zera filas
				criaFila(&jogador1);
				criaFila(&jogador2);
				criaFila(&aux);

				printf("Simulacao 5 iniciada\n");
				geraBaralho(primeira);
				primeiranova = embaralha(primeira);
				distribui(&jogador1, &jogador2, primeiranova);
				duelo(&jogador1, &jogador2, &aux, dados);

				printf("\nA media de jogadas foi %d jogadas\n", mediaJogadas(dados));
				printf("A media de tempo foi %lu milisegundos\n", mediaTempo(dados));
				maisLento(dados);
				maisRapido(dados);
				free(dados);
				dados = malloc(sizeof(struct dados));
				
				printf("\nPressione qualquer tecla para continuar...\n");
				getchar();
				break;

			case 4:
				exit(0);

			default:
				printf("Opcao invalida!\n\n");
				break;
		}
	}
}