#include #include #define MAX_Q_SIZE 8 /* Maximum size of the queue */ /* * Declare the queue and the front and rear indexes * They are also called head and tail */ char queue[MAX_Q_SIZE]; int rear_index = 0, front_index = 0; int elements_in_q = 0; int insert(char value) { if (elements_in_q == MAX_Q_SIZE) return 1; elements_in_q++; rear_index = rear_index + 1; if (rear_index == MAX_Q_SIZE) rear_index = 0; queue[rear_index] = value; return 0; } int delete() { if (!elements_in_q) { return -1; } elements_in_q--; front_index = front_index + 1; if (front_index == MAX_Q_SIZE) front_index = 0; return (queue[front_index]); } char operations[]={'i','a','i','b','i','c','d','i','d','i','e','i','f','i','g', 'i','h','i','i','i','k','d','d','d','d','d','d','d','d','d'}; int main() { char op, value; int op_index = 0; int deleted_value; while (op_index < sizeof(operations)) { op = operations[op_index++]; switch (op) { case 'i': if (op_index >= sizeof(operations)) { printf("insert operation without value at end of" " operations array\n"); exit(1); } value = operations[op_index++]; if (insert(value)) { printf("insert failed - queue full for op_index = %d\n", op_index); } break; case 'd': if ((deleted_value = delete()) == -1) { printf("cannot delete from empty queue. op_index = %d\n", op_index); break; } printf("deleted %c\n", deleted_value); break; default: printf("invalid operation %c at op_index = %d\n", op, op_index); } } }