Ir para conteúdo
Fórum Script Brasil
  • 0

Fila de atendimento em c


Cleiton Neri

Pergunta

Sdd, estou precisando desenvolver uma fila de atendimento, implementar prioridade, mostar o ultimo item chamado nessa fila e colocar a saída em um arquivo txt, mas não sei como, se alguém puder comentar esse código pra eu ter como base, ficarei grato.

 

#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
struct Node{
 int num;
 struct Node *prox;
};
typedef struct Node node;

int tam;

int menu(void);
void opcao(node *FILA, int op);
void inicia(node *FILA);
int vazia(node *FILA);
node *aloca();
void insere(node *FILA);
node *retira(node *FILA);
void exibe(node *FILA);
void libera(node *FILA);


int main(void)
{
	setlocale(LC_ALL, "Portuguese");
	
	
 node *FILA = (node *) malloc(sizeof(node));
 if(!FILA){
  printf("Sem memória!\n");
  exit(1);
 }else{
 inicia(FILA);
 int opc;

 do{
  opc=menu();
  opcao(FILA,opc);
 }while(opc);

 free(FILA);
 return 0;
 }
}


int menu(void)
{
 int opc;

 	printf("=========================Fila=========================\n\n");
 	printf("ESCOLHA UMA OPÇÃO \n");
 	printf("\t0. Sair\n");
 	printf("\t1. Zerar fila\n");
 	printf("\t2. Exibir fila\n");
 	printf("\t3. Adicionar Elemento na Fila\n");
 	printf("\t4. Retirar Elemento da Fila\n");
 	printf("\tOpção: "); 
	scanf("%i", &opc);
		
 return opc;
 
}

void opcao(node *FILA, int op)
{
 	node *tmp;
 	switch(op){
  		case 0: libera(FILA); break;
  		case 1: libera(FILA); inicia(FILA); break;
		case 2: exibe(FILA); break;
		case 3: insere(FILA); break;
		case 4: tmp= retira(FILA);
	if(tmp != NULL){
		printf("Retirado: %3d\n\n", tmp->num);
    	free(tmp);
   }
	break;

	default:
   		printf("Opção invalida\n\n");
   		
	}
}

void inicia(node *FILA)
{
	FILA->prox = NULL;
	tam=0;
}

int vazia(node *FILA)
{
	if(FILA->prox == NULL)
	return 1;
 	else
	return 0;
}

node *aloca()
{
	node *novo=(node *) malloc(sizeof(node));
	if(!novo){
		printf("Sem memoria disponivel!\n");
		exit(1);
 	}else{
		printf("Novo elemento: "); scanf("%d", &novo->num);
	return novo;
	}
}

void insere(node *FILA)
{
	node *novo=aloca();
	novo->prox = NULL;

	if(vazia(FILA))
		FILA->prox=novo;
	else
	{
		node *tmp = FILA->prox;

	while(tmp->prox != NULL)
		tmp = tmp->prox;

	tmp->prox = novo;
	}
	tam++;
}


node *retira(node *FILA)
{
	if(FILA->prox == NULL){
		printf("Fila já esta vazia\n");
		return NULL;
	}else{
	node *tmp = FILA->prox;
	FILA->prox = tmp->prox;
	tam--;
	return tmp;
	}

}


void exibe(node *FILA)
{
	if(vazia(FILA)){
		printf("Fila vazia!\n\n");
	return ;
 }

	node *tmp;
	tmp = FILA->prox;
	printf("Fila :");
	while( tmp != NULL){
	printf("%5d", tmp->num);
	tmp = tmp->prox;
	}
	printf("\n        ");
	int count;
	for(count=0 ; count < tam ; count++)
	printf("  ^  ");
	printf("\nOrdem:");
	for(count=0 ; count < tam ; count++)
	printf("%5d", count+1);


	printf("\n\n");
}

void libera(node *FILA)
{
	if(!vazia(FILA)){
	node *proxNode,
     *atual;

	atual = FILA->prox;
	while(atual != NULL){
	proxNode = atual->prox;
	free(atual);
	atual = proxNode;
		}
	}
}

 

Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...