#include #define MAXLEN 100 typedef struct { char element[MAXLEN]; int front; int back; } queue; queue init () { queue Q; Q.front = 0; Q.back = MAXLEN - 1; return Q; } int isEmpty ( queue Q ) { return (Q.front == (Q.back + 1) % MAXLEN); } int isFull ( queue Q ) { return (Q.front == (Q.back + 2) % MAXLEN); } char front ( queue Q ) { if (isEmpty(Q)) { fprintf(stderr,"front: Queue is empty\n"); return '\0'; } return Q.element[Q.front]; } queue enqueue ( queue Q , char ch ) { if (isFull(Q)) { fprintf(stderr,"enqueue: Queue is full\n"); return Q; } ++Q.back; if (Q.back == MAXLEN) Q.back = 0; Q.element[Q.back] = ch; return Q; } queue dequeue ( queue Q ) { if (isEmpty(Q)) { fprintf(stderr,"dequeue: Queue is empty\n"); return Q; } ++Q.front; if (Q.front == MAXLEN) Q.front = 0; return Q; } void print ( queue Q ) { int i; if (isEmpty(Q)) return; i = Q.front; while (1) { printf("%c", Q.element[i]); if (i == Q.back) break; if (++i == MAXLEN) i = 0; } } int main () { queue Q; Q = init(); printf("Current queue : "); print(Q); printf("\n"); Q = enqueue(Q,'h'); printf("Current queue : "); print(Q); printf("\n"); Q = enqueue(Q,'w'); printf("Current queue : "); print(Q); printf("\n"); Q = enqueue(Q,'r'); printf("Current queue : "); print(Q); printf("\n"); Q = dequeue(Q); printf("Current queue : "); print(Q); printf("\n"); Q = dequeue(Q); printf("Current queue : "); print(Q); printf("\n"); Q = enqueue(Q,'c'); printf("Current queue : "); print(Q); printf("\n"); Q = dequeue(Q); printf("Current queue : "); print(Q); printf("\n"); Q = dequeue(Q); printf("Current queue : "); print(Q); printf("\n"); Q = dequeue(Q); printf("Current queue : "); print(Q); printf("\n"); }