tutorfree

filaInteligente.h

Mar 17th, 2016
477
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.42 KB | None | 0 0
  1. #define N 10
  2.  
  3. typedef struct
  4. {
  5.     int *vetor;//ponteiro para o vetor
  6.     int tamVetor;//tamanho do vetor
  7.     int inicio;
  8.     int fim;
  9. }Fila;
  10.  
  11. Fila *fila_cria()
  12. {
  13.      Fila *f=(Fila*)malloc(sizeof(Fila));
  14.      f->inicio=0;
  15.      f->fim=0;
  16.      f->tamVetor=N;
  17.      f->vetor=(int*)malloc(sizeof(int)*N);
  18.      return f;
  19. }
  20.  
  21. int fila_vazia(Fila *f)
  22. {
  23.     if(f->inicio==f->fim)
  24.        return 1;
  25.  
  26.     return 0;
  27. }
  28.  
  29. void compacta(Fila *f)
  30. {
  31.      int tamFila=f->fim - f->inicio;
  32.      int i;
  33.      
  34.      for(i=0;i<tamFila;i++)
  35.         f->vetor[i]=f->vetor[i+f->inicio];
  36.      f->inicio=0;
  37.      f->fim=tamFila;
  38. }
  39.  
  40. //compactaƧao inteligente
  41. void fila_insere(Fila *f, int n)
  42. {
  43.      if(f->fim==f->tamVetor)
  44.      {
  45.         //falso fila cheia
  46.         int tamFila=f->fim - f->inicio;
  47.         if(tamFila < f->tamVetor)
  48.            compacta(f);
  49.         else
  50.         {
  51.            printf("Fila Cheia!!\n");
  52.            return;
  53.         }
  54.      }
  55.      f->vetor[f->fim]=n;
  56.      f->fim++;
  57. }
  58.            
  59. int fila_retira(Fila *f)
  60. {
  61.     int v;
  62.     v=f->vetor[f->inicio];
  63.     f->inicio++;
  64.     return v;
  65. }
  66.          
  67. void fila_libera(Fila *f)
  68. {
  69.      free(f->vetor);
  70.      free(f);
  71. }
  72.        
  73. void mostra_fila(Fila *f)
  74. {
  75.      int i;
  76.      if(fila_vazia(f))
  77.        printf("Fila vazia!\n");
  78.      else
  79.      {
  80.        for(i=f->inicio; i< f->fim;i++)
  81.          printf("%d\t", f->vetor[i]);
  82.        printf("\n");
  83.      }
  84. }
Advertisement
Add Comment
Please, Sign In to add comment