Created
March 28, 2017 18:55
-
-
Save anonymous/62e6520f8fc2db0b8774639bf429986d to your computer and use it in GitHub Desktop.
PROJETO ED 1 created by henriquelobato - https://repl.it/GhZL/157
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <stdio.h> | |
#include <stdlib.h> | |
#include <string.h> | |
#define MAX 5 | |
typedef struct Fila{ | |
int senha, posicao; | |
struct Fila* prox; | |
}Fila; | |
Fila* cria(void){ | |
Fila* f = (Fila*) malloc(sizeof(Fila)); | |
f->prox = NULL; | |
return f; | |
} | |
int isVazia(Fila* p){ | |
if(p->prox == NULL){ | |
return 1; | |
}else{ | |
return 0; | |
} | |
} | |
void insere(Fila* f, int senha){ //Insere o fim | |
Fila* novo = (Fila*) malloc(sizeof(Fila)); | |
novo->senha = senha; | |
novo->prox = NULL; | |
Fila* aux = f; | |
if(isVazia(f)){// Se for vazia, aponte o ponteiro da lista para o novo elemento | |
f->prox = novo; | |
novo->posicao = 1; | |
}else{ //Senão, ache o fim da lista... | |
while(aux->prox != NULL){ | |
aux = aux->prox; | |
} | |
aux->prox = novo; //...e coloque-o lá | |
} | |
} | |
int remove(Fila* f, int senha){ | |
Fila* anterior = NULL; | |
Fila* atual = f; | |
while(atual->senha != senha){ | |
anterior = atual; | |
atual = atual->prox; | |
} | |
if(atual == NULL){//Caso lista vazia | |
printf("Lista vazia"); | |
}else{//Então deve haver a remoção no primeiro elemento (F.I.F.O.) | |
f = atual->prox; | |
free(atual); | |
} | |
} | |
void libera_fila(Fila* f){ | |
Fila* aux = f->prox; | |
while(aux != NULL){ | |
Fila* temp = aux->prox; | |
free(aux); | |
aux = temp; | |
} | |
} | |
void mostra_fila(Fila* f, char tipo){ | |
Fila* aux = f; | |
if(isVazia(aux)){ | |
printf("Lista %c vazia\n", tipo); | |
}else{ | |
while(aux->prox != NULL){ | |
printf("%c%04d\n", tipo, aux->senha); | |
aux = aux->prox; | |
} | |
} | |
} | |
void atende(Fila* preferencial, Fila* normal, Fila* especial, Fila* ordem){ | |
if(isVazia(preferencial)){ | |
insere(ordem); | |
insere(ordem); | |
}else{ | |
while(){ | |
} | |
} | |
mostra_fila(ordem); | |
} | |
int main(void) { | |
int count_preferencial = 1; | |
int count_normal = 1; | |
int count_especial = 1; | |
int opcao = 1; | |
Fila* fila_preferencial = cria(); | |
Fila* fila_normal = cria(); | |
Fila* fila_especial = cria(); | |
Fila* ordem_atendimento = cria(); | |
while(opcao != 0){ | |
printf("1: Gerar senha Fila Preferencial\n2: Gerar senha Fila Normal\n3: Gerar senha Fila Especial\n4: Mostrar senha a ser atendida\n5: Mostrar filas\n0: Sair\n"); | |
scanf("%i", &opcao); | |
switch(opcao){ | |
case 0: | |
exit(1); | |
case 1: //Gerar senha preferencial | |
insere(fila_preferencial, count_preferencial); | |
break; | |
case 2: //Gerar senha normal | |
insere(fila_normal, count_normal); | |
break; | |
case 3: //Gerar senha especial | |
insere(fila_especial, count_especial); | |
break; | |
case 4: // Mostrar proxima senha | |
atende(fila_preferencial, fila_normal, fila_especial, ordem_atendimento); | |
break; | |
case 5: //Mostrar filas | |
mostra_fila(fila_preferencial, 'P'); | |
mostra_fila(fila_normal, 'N'); | |
mostra_fila(fila_especial, 'E'); | |
break; | |
default: | |
printf("Opção inexistente!\n"); | |
break; | |
} | |
} | |
return 0; | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment