#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//FILA = QUEUE
struct fila
{
 char caractere;
 struct fila *prox;
} *no, *topo ,*cauda;//cauda = tail


struct fila *insere(char carac)
{
 if((no = (struct fila*) malloc(sizeof(struct fila))) != NULL)
 {
  (*no).caractere = carac;
  (*no).prox = NULL;
  if(topo != NULL)
     (*cauda).prox = no;
  else
      topo = no;
  cauda = no;
 }
 return no;
}


char retira(void)
{
 char retirado =' ';
 struct fila *aux;
 if(topo)//se topo aponta p/ NULL retorna falso
 {
  aux = topo;
  retirado = (*topo).caractere;
  topo = (*topo).prox;
  printf("n%c",retirado);//linha apenas p/ mostrar a limpeza da memoria
  fflush(stdin);
  free(aux);
  if(!topo)//se o contrario de topo ocorrer (ou seja topo = NULL)
    cauda = NULL;
 }
 return(retirado);
}

int main(void)
{
 char caract, opera='n';
char desemp;
struct pilha *p_novo;
topo = NULL ;
while(opera != 's')
{
 printf("nEscolha (i)nserir, (r)etirar ou (s)air: ");
 fflush(stdin);
 opera=getche();
 printf("n");
 fflush(stdin);
 if((opera == 'i')||(opera == 'I'))
 {
  printf("Caractere: ");
  fflush(stdin);
  caract=getche();
  if (p_novo = insere(caract))
  {
         printf("nInserido o caractere %c (end. de memoria: %p)",caract,p_novo) ;
         fflush(stdin);
  }
  else
  {
     printf("nErro - Nao conseguiu alocar memoria!") ;
     fflush(stdin);
  }
 }
 else
     if((opera == 'r')||(opera == 'R'))
        if ((desemp = retira()) != ' ')
        {
           printf("nRetirado o caractere: %c",desemp) ;
           fflush(stdin);
        }
        else
        {
           printf("nFila vazia");
           fflush(stdin);
        }
}
while((desemp = retira()) != ' ');
printf("n");
system("PAUSE");
return 0;
}

Fila em C

  • 1.
    #include <stdio.h> #include <stdlib.h> #include<string.h> //FILA = QUEUE struct fila { char caractere; struct fila *prox; } *no, *topo ,*cauda;//cauda = tail struct fila *insere(char carac) { if((no = (struct fila*) malloc(sizeof(struct fila))) != NULL) { (*no).caractere = carac; (*no).prox = NULL; if(topo != NULL) (*cauda).prox = no; else topo = no; cauda = no; } return no; } char retira(void) { char retirado =' '; struct fila *aux; if(topo)//se topo aponta p/ NULL retorna falso { aux = topo; retirado = (*topo).caractere; topo = (*topo).prox; printf("n%c",retirado);//linha apenas p/ mostrar a limpeza da memoria fflush(stdin); free(aux); if(!topo)//se o contrario de topo ocorrer (ou seja topo = NULL) cauda = NULL; } return(retirado); } int main(void) { char caract, opera='n';
  • 2.
    char desemp; struct pilha*p_novo; topo = NULL ; while(opera != 's') { printf("nEscolha (i)nserir, (r)etirar ou (s)air: "); fflush(stdin); opera=getche(); printf("n"); fflush(stdin); if((opera == 'i')||(opera == 'I')) { printf("Caractere: "); fflush(stdin); caract=getche(); if (p_novo = insere(caract)) { printf("nInserido o caractere %c (end. de memoria: %p)",caract,p_novo) ; fflush(stdin); } else { printf("nErro - Nao conseguiu alocar memoria!") ; fflush(stdin); } } else if((opera == 'r')||(opera == 'R')) if ((desemp = retira()) != ' ') { printf("nRetirado o caractere: %c",desemp) ; fflush(stdin); } else { printf("nFila vazia"); fflush(stdin); } } while((desemp = retira()) != ' '); printf("n"); system("PAUSE"); return 0; }