Ir ao conteúdo
  • Cadastre-se
Mark Zanon

C Inserir no início de uma fila circular

Recommended Posts

Estou trabalhando num programa de fila circular onde desejo implementar uma função de "furar fila", onde o usuário insere um número e este número deveria ser inserido nos espaços da fila anteriores a f.com. Porém a lógica que implementei não pareceu funcionar muito bem, gostaria de pedir ajuda com ideias ou sobre o que fazer efetivamente no código. Declarei a minha fila assm:

 

struct circular
{   int com;
    int fim;
    int total;
    int memo[MAX];
}; 

typedef struct circular circular;
int main ()
{
    struct circular F;
    F.com = 0;
    F.total = 0;
    F.fim = -1;

}

Deste modo eu declaro a fila e a inicializo na main, a função que tentei criar porém não funcionou foi esta:

 

void furafila(struct circular *F, int x)
{  int aux,aux2;
    aux = F->com;
    F->fim++;
    if(F->fim == MAX)
   {
      F->fim = 0;
   }
    aux2=F->fim;
    F->memo[F->fim] = x;
    F->com = aux2;
    F->fim = aux-1;
    F->total++;

}

Alguma sugestão?

Compartilhar este post


Link para o post
Compartilhar em outros sites

@giu_d Segue o código inteiro

#include<stdio.h>
#include<stdlib.h>
#define MAX 5

struct circular
{ 	int com;
    int fim;
    int total;
	int memo[MAX];
};

typedef struct circular circular;
void enfileirar(struct circular *F, int x);
int desenfileirar(struct circular *F);
void listar(struct circular A);
int busca(struct circular B, int x);




int main ()
{
	struct circular F;
	F.com = 0;
	F.total = 0;
	F.fim = -1;
	int opc,x,pos,num;

	do
    {
        opc = menu();

        switch(opc)
		{
			case 1:
			if(F.fim==MAX-1)
			{
				printf("Fila cheia ");
			}
			else
            {
                printf("Digite o numero que deseja inserir ");
                scanf("%d", &x);
                if(busca(F,x) == 1)
                    {
                        printf("Nao eh possivel inserir numeros repetidos ");
                    }
                else
                    {
                        enfileirar(&F, x);
                    }

            }
			break;
			case 2:
			if(F.total == 0)
				printf("Fila vazia ");
			else
				printf("Valor retirado = %d", desenfileirar(&F));
			break;
			case 3:
			if(F.fim == -1)
				printf("\n Fila vazia ");
			else
				listar(F);
			break;
			
			case 4:
            printf("Digite o numero que deseja buscar ");
            scanf("%d", &x);
            if((busca(F,x)==1))
                printf("Achou oba!");
            else
                printf("Numero nao encontrado :/");
			case 5:
			printf("Saindo ");
			break;
			default: printf("Posicao invalida ");

		}


	}while(opc!=5);


}

void enfileirar(struct circular *F, int x)
{
    F->fim++;
	if(F->fim == MAX)
    F->fim = 0;
	F->memo[F->fim] = x;
	F->total++;
}

int desenfileirar(struct circular *F)
{
	int aux;
	aux = F->memo[F->com];
	F->com++;
	if(F->com == MAX)
    {
        F->com = 0;
	}
	F->total --;
	return aux;

}

void listar(struct circular A)
{
	while(A.total!=0)
	{
		printf("%d", desenfileirar(&A));
	}
}



}
int busca(struct circular B, int x)
{   int achou;
    while(B.total!=0)
    {
        if(x == desenfileirar(&B))
        {
           achou = 1;
        }
    }

    return achou;
}

int menu()
{
    int opc;
    printf("\n 1- Enfileirar ");
    printf("\n 2- Desenfileirar ");
    printf("\n 3- Listar ");
    printf("\n 7 - Busca");
    printf("\n 8 - Sair");
    printf("\n OPC =  ");
    scanf("%d", &opc);
    return opc;
}

 

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×