Skip to content

Instantly share code, notes, and snippets.

Created March 28, 2017 02:49
Show Gist options
  • Save anonymous/d8cb8c252f4de10dc774d42ca54ea61b to your computer and use it in GitHub Desktop.
Save anonymous/d8cb8c252f4de10dc774d42ca54ea61b to your computer and use it in GitHub Desktop.
PROJETO ED 1 created by henriquelobato - https://repl.it/GhZL/95
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 5
typedef struct Fila{
int senha;
char tipo;
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;
}
}
int insere(Fila* f, int senha){ //Insere o fim
Fila* novo = (Fila*) malloc(sizeof(Fila));
novo->senha = senha;
Fila* aux = f;
if(isVazia(f)){// Se for vazia, aponte o ponteiro da lista para o novo elemento
f->prox = novo;
novo->prox = NULL;
}else{ //Senão, ache o fim da lista...
while(aux->prox != NULL){
aux = aux->prox;
}
}
aux = novo; //...e coloque-o lá
novo->prox = NULL;
return senha++; //Adiciona para a próxima senha
}
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){
}
int main(int argc, char *argv[]) {
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();
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
count_preferencial = insere(fila_preferencial, count_preferencial);
break;
case 2: //Gerar senha normal
count_normal = insere(fila_normal, count_normal);
break;
case 3: //Gerar senha especial
count_especial = insere(fila_especial, count_especial);
break;
case 4: // Mostrar proxima senha
atende(fila_preferencial, fila_normal, fila_especial);
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