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; }
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); }
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); }
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."); } }
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; }
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); }; } }
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). }
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; } } }