Tipos de Dados Abstractos: Fila

From Wiki**3

Interface

   #ifndef __QUEUE_H__
   #define __QUEUE_H__
 
   #include "Item.h"
 
   void QUEUEinit(int);
   int  QUEUEempty();
   void QUEUEput(Item);
   Item QUEUEget();
 
   #endif

Implementação

Implementação com vector

 #include <stdlib.h>
 #include "Item.h"
 #include "QUEUE.h"
 
 static Item *q;
 static int N, head, tail;
 
 void QUEUEinit(int maxN) {
   q = malloc((maxN+1)*sizeof(Item)); 
   N = maxN+1; head = N; tail = 0;
 }
 
 int  QUEUEempty()        { return head % N == tail;           }
 void QUEUEput(Item item) { q[tail++] = item; tail = tail % N; }
 Item QUEUEget()          { head = head % N; return q[head++]; }

Implementação com lista

 #include <stdlib.h>
 #include "Item.h"
 #include "QUEUE.h"
 
 typedef struct QUEUEnode *link;
 struct QUEUEnode { Item item; link next; };
 static link head, tail;
 
 link NEW(Item item, link next) {
   link x = malloc(sizeof *x);
   x->item = item; x->next = next;     
   return x;                         
 }                                   
 
 void QUEUEinit(int maxN) { head = NULL; }
 int  QUEUEempty()        { return head == NULL; }
 void QUEUEput(Item item) { 
   if (head == NULL) { head = tail = NEW(item, head); return; }
   tail->next = NEW(item, tail->next);
   tail = tail->next;
 }
 
 Item QUEUEget() {
   Item item = head->item;
   link t = head->next; 
   free(head); head = t;
   return item;
 }

Cliente