0
having the code of the queue need to remove value and position both chosen by the user
typedef struct reg {
   int         conteudo; 
   struct reg *prox;
} celula;
// Tira um elemento da fila fi e devolve
// o conteudo do elemento removido.
// Supõe que a fila não está vazia.
int busca_Remove (celula *fi,int num) {
   int x;
   celula *p;
   p = fi->prox;  // o primeiro da fila
   x = p->conteudo;
   fi->prox= p->prox;
   return x;
}
}
// Coloca um novo elemento com conteudo y
// na fila fi. Devolve o endereço da
// cabeça da fila resultante.
celula *Insere (int y, celula *fi, int vsize) { 
   celula *nova;
   nova = (celula*)malloc (sizeof(celula)*vsize);
   nova->prox = fi->prox;
   fi->prox = nova;
   fi->conteudo = y;
   return nova;
}
void show(celula *fi)
{
    celula *p;
    p = fi->prox; 
    printf("\n\n\nImprimindo a fila: \n");
    while(p != fi)
    {
        printf("%d  ", p->conteudo);
        p = p->prox;
    }
}
int main(){
    celula *fi;
    fi = (celula*)malloc (sizeof(celula));
    fi->prox = fi;
    int a,b,c;
    int i,tam;
    printf("Digite o tamanho: ");
    scanf("%d",&tam);   
    printf("Inserindo valores....\n "); 
    for (i = 1; i <= tam; i++){
        printf("Digite o valor: ");
        scanf("%d",&a); 
        fi = Insere(a, fi,tam);
    }
    show(fi);
    printf("Digite o valor: ");
    scanf("%d",&c);
    printf("\nRemove elementos da fila\n");
    printf("\n\nRemovendo os elementos.... ");
    free(fi);
    printf("\n\n");
    return 0;
}