Ir ao conteúdo
  • Cadastre-se

C Inserir no início de uma fila circular


Mark Zanon

Posts recomendados

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?

Link para o comentário
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;
}

 

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário 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 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...