Ir ao conteúdo
  • Cadastre-se

Ajuda com fila dinâmica


Posts recomendados

Estou com problema com um código de fila dinâmica acredito que o problema esteja na criação da fila, porém não estou conseguindo resolver. Segue o código:

#include <stdio.h>
#include <stdlib.h>
#include <locale.h>

//Declarações iniciais
typedef struct elem{
	int info;
	struct elem *prox;
	
}tipoElem;

typedef struct{
	tipoElem *inicio;
	tipoElem *fim;
}Fila;

Fila *q;
int count=0;

//Função para criar fila vazia
void cria_fila(){
	q->inicio = NULL;
	q->fim = NULL;
	printf("FILA CRIADA!");
}

//Função para verificar se a fila está vazia
int fila_vazia(){
	if(q->inicio == NULL)
	    return 1;
	else
	   return 0;
} 

//Função insere na fila
int insere(int valor){
	tipoElem *p;
	p = (tipoElem*) malloc(sizeof(tipoElem));
	if(p == NULL)
	    return 0;
	count++;
	p->info = valor;
	p->prox = NULL;
	if(fila_vazia())
	    q->inicio = p;
	else{
		q->fim->prox = p;
		q->fim = p;
	}
	return 1;
}

//Função para remover elemento na fila
int remove(){
	tipoElem *p;
	if(fila_vazia()){
		printf("FILA VAZIA!\n");
		return 0;
	}
	else{
		count--;
		p = q->inicio;
		q->inicio = p->prox;
		if(q->inicio == NULL)
		    q->fim == NULL;
		free(p);
	}
	return 1;
}

//Função para consultar primeiro elemento
int consulta(){
	int valor;
	if(fila_vazia()){
		printf("FILA VAZIA!\n");
		return 0;
	}
	else{
		valor = q->inicio->info;
	    printf("PRIMEIRO ELEMENTO: %d\n", valor);
	    return 1;
	}
}
//Função que retorna o tamanho da fila
int tamanho(){
	return count;
}

//Função que imprime a fila
void imprimir() {
     tipoElem *ponteiro = q->inicio;
     if( fila_vazia() ){
    	printf("FILA VAZIA!\n");
     }
     while (ponteiro != NULL) {
           printf("%d\n", ponteiro->info);
           ponteiro = ponteiro->prox;
     }
}

//Função que destroi a fila
int destruir(){
	tipoElem *temp;
	if(fila_vazia()){
		printf("FILA VAZIA!\n");
		return 0;
	}
	else{
		while(q->inicio != NULL){
			temp = q->inicio;
			q->inicio = q->inicio->prox;
			free(temp);
		}
		printf("FILA DESTRUÍDA!\n");
		count=;
		return 1;
	}		
}

int main(){
		int valor=0, op=0;
	setlocale(LC_ALL,""); //comando para usar caracteres especiais
	
	do{
        printf("=========MENU==========");
        printf("\n(1) CRIAR FILA\n(2) INSERIR ELEMENTO\n(3) REMOVER ELEMENTO\n(4) CONSULTAR TAMANHO");
        printf("\n(5) CONSULTAR INÍCIO\n(6) IMPRIMIR FILA\n(7) DESTRUIR FILA\n");
        printf("=======================\n");
        
        do{
	      printf("DIGITE SUA OPÇÃO: ");
          scanf("%d", &op);
        }while(op < 1 || op > 6);
      
        system("cls || clear");
      
        switch(op){
        	case 1: cria_fila();
            case 2: printf("DIGITE O VALOR A SER INSERIDO: ");
                    scanf("%d", &valor);
                    insere(valor);
                    break;
            case 3: remove();
                    break;
            case 4: printf("QUANTIDADE DE ELEMENTOS DA FILA: %d \n", tamanho() );
                    break;
            case 5: consulta();
                    break;
			case 6: printf("ELEMENTOS DA FILA:\n");
			        imprimir();
			        break;    
			case 7: destruir();
			        break;        
        }
        
        printf("\nDIGITE 0 PARA CONTINUAR: ");
		scanf("%d", &op);
		printf("\n\n");
		
	}while(op==0);
	
	return 0;
}

 

Link para o comentário
Compartilhar em outros sites

@Lucas Akio Fujita Sato Fiz uma lista dessa tua fila kkkk. Te aconselho a estudar um pouco mais a parte de inserção: https://programacaodescomplicada.wordpress.com/2014/01/13/ed1-aula-27-lista-dinamica-insercao-e-remocao/

#include <stdio.h>
#include <stdlib.h>


//Declarações iniciais
typedef struct elem {
  int info;
  struct elem *prox;

  } tipoElem;

typedef struct {
  tipoElem *inicio;
  tipoElem *fim;
  } Fila;

Fila *q;
int count = ;

//Função para criar fila vazia
void cria_fila() {
  q = (Fila *) malloc(sizeof(Fila));
  q->inicio = NULL;
  q->fim = NULL;
  printf("FILA CRIADA!");
  }

//Função para verificar se a fila está vazia
int fila_vazia() {
  if(q->inicio == NULL)
    return 1;
  else
    return ;
  }

//Função insere na fila
int insere(int valor) {
  tipoElem *p, *tmp;
  p = (tipoElem*) malloc(sizeof(tipoElem));
  if(p == NULL)
    return ;
  count++;
  p->info = valor;
  tmp = q->fim;
  q->fim = p;
  q->fim->prox = tmp;
  return 1;
  }

//Função para remover elemento na fila
int rremove() {
  tipoElem *p;
  if(fila_vazia()) {
      printf("FILA VAZIA!\n");
      return ;
      }
  else {
      count--;
      p = q->inicio;
      q->inicio = p->prox;
      if(q->inicio == NULL)
        q->fim == NULL;
      free(p);
      }
  return 1;
  }

//Função para consultar primeiro elemento
int consulta() {
  int valor;
  if(fila_vazia()) {
      printf("FILA VAZIA!\n");
      return ;
      }
  else {
      printf("PRIMEIRO ELEMENTO: %d\n", q->inicio->info);
      return 1;
      }
  }
//Função que retorna o tamanho da fila
int tamanho() {
  return count;
  }

//Função que imprime a fila
void imprimir() {
  tipoElem *ponteiro = q->fim;
  if( fila_vazia() ) {
      printf("FILA VAZIA!\n");
      }
  while (ponteiro != NULL) {
      printf("%d\n", ponteiro->info);
      ponteiro = ponteiro->prox;
      }
  }

//Função que destroi a fila
int destruir() {
  tipoElem *temp;
  if(fila_vazia()) {
      printf("FILA VAZIA!\n");
      return ;
      }
  else {
      while(q->inicio != NULL) {
          temp = q->inicio;
          q->inicio = q->inicio->prox;
          free(temp);
          }
      printf("FILA DESTRUÍDA!\n");
      count = ;
      return 1;
      }
  }

int main() {
  int valor = , op = ;
  do {
      printf("=========MENU==========");
      printf("\n(1) CRIAR FILA\n(2) INSERIR ELEMENTO\n(3) REMOVER ELEMENTO\n(4) CONSULTAR TAMANHO");
      printf("\n(5) CONSULTAR INÍCIO\n(6) IMPRIMIR FILA\n(7) DESTRUIR FILA\n");
      printf("=======================\n");
      do {
          printf("DIGITE SUA OPÇÃO: ");
          scanf("%d", &op);
          }
      while(op < 1 || op > 6);
      system("cls || clear");
      switch(op) {
          case 1:
            cria_fila();
          case 2:
            printf("DIGITE O VALOR A SER INSERIDO: ");
            scanf("%d", &valor);
            insere(valor);
            break;
          case 3:
            rremove();
            break;
          case 4:
            printf("QUANTIDADE DE ELEMENTOS DA FILA: %d \n", tamanho() );
            break;
          case 5:
            consulta();
            break;
          case 6:
            printf("ELEMENTOS DA FILA:\n");
            imprimir();
            break;
          case 7:
            destruir();
            break;
          }
      printf("\nDIGITE 0 PARA CONTINUAR: ");
      scanf("%d", &op);
      printf("\n\n");
      }
  while(op == );
  return ;
  }

 

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!