#include /* queue.c */ #include #include "queue.h" void printQueue( Queue * q ) { QueueNode * n = q->head; while( n != NULL ) { printf("%c", n->data); n = n->nextPtr; } } void initQueue(Queue * q) { /*@{}@XPC{@I q is assumed to be non-NULL}*/ q->head = NULL; q->tail = NULL; } Queue * newQueue() { Queue * q = malloc( sizeof(Queue) ); if ( q == NULL ) { fprintf(stderr, "newQueue: out of memory!\n"); } else { initQueue(q); } return q; } /*@{}@XPC{pass by reference --- @I {q} is assumed to be non-NULL!}*/ bool enqueue( Queue * q, char c ) { QueueNode * n = malloc( sizeof(QueueNode) ); if ( n == NULL ) { fprintf(stderr, "enqueue: out of memory!\n"); return false; } else { n->data = c; n->nextPtr = NULL; if ( q->head == NULL ) { q->head = n; } else { q->tail->nextPtr = n; } q->tail = n; return true; } } bool isEmpty( Queue * q ) { return q->head == NULL; } /*@{}@XPC{pass by reference --- @I {q} is assumed to be non-NULL and non-empty!}*/ char dequeue( Queue * q ) { QueueNode * oldHead = q->head; char c = oldHead->data; q->head = oldHead->nextPtr; if ( q->head == NULL ) { q->tail = NULL; } free( oldHead ); return c; }