Inclusão e exclusão de elementos em uma fila circular
Autor: Luciana Sondermann | Publicado: 2011-09-29T20:36:00-03:00

#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
void entrar(int *fila,int v,int tam,int *ini,int *fim)
{
&nbsp;&nbsp;&nbsp; int prov = (*fim+1) % (tam);
&nbsp;&nbsp;&nbsp; if(prov != *ini) 
&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; *fim=prov;
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; fila[*fim]=v;
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if(*ini==-1) *ini=0;
&nbsp;&nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp; else printf("\nFila cheia!\n");
}
int sair(int *fila,int tam, int *ini,int *fim) {
&nbsp;&nbsp;&nbsp; int v;
&nbsp;&nbsp;&nbsp; if( *ini != -1 )
&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; v=fila[*ini];
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if(*ini==*fim)
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; fila[*ini]=NULL;
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; *ini=*fim=-1;
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; else 
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; fila[*ini]=NULL;
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; *ini = (*ini+1) % tam;
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return v;
&nbsp;&nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp; else {
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; printf("\nFila vazia!\n");
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return -1;
&nbsp;&nbsp;&nbsp; }
}

int main() {

&nbsp;&nbsp;&nbsp; char op;
&nbsp;&nbsp;&nbsp; int ok, tam, *fila, elemento,ini=-1,fim=-1,i;
&nbsp;&nbsp;&nbsp; printf("Informe o tamanho desejado para a fila: ");
&nbsp;&nbsp;&nbsp; scanf("%d",&amp;tam);
&nbsp;&nbsp;&nbsp; if((fila=(int*)malloc(tam*sizeof(int)))==NULL) exit(1);
&nbsp;&nbsp;&nbsp; do{
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; printf("\n(e)ntrar (s)air (f)echar: ");
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; getchar();
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; scanf("%c",&amp;op);
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; switch (op){
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; case 'e':
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; printf("\nInforme o elemento a ser inserido: ");
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; scanf("%d",&amp;elemento);
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; entrar(fila,elemento,tam,&amp;ini,&amp;fim);
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; break;
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; case 's':
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ok=sair(fila,tam,&amp;ini,&amp;fim);
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; printf("\nO elemento retirado foi: %d.\n",ok);
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; break;
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; for(i=0;i&lt;tam;i++) printf("%d\t",fila[i]);
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; printf("\n");
&nbsp;&nbsp;&nbsp; }while(op!='f');
&nbsp;&nbsp;&nbsp; return 0;
}