data-structures · intermediate · ~15 min

Circular int queue

Modular indexing for a ring buffer.

Challenge

Given

typedef struct { int *data; size_t cap, len, head; } iqueue_t;

implement a FIFO queue with fixed capacity, using a circular buffer. Functions:

  • int queue_init(iqueue_t *q, size_t cap) — allocate data to size cap, return 0 or -1.
  • void queue_free(iqueue_t *q)
  • int queue_enqueue(iqueue_t *q, int v) — return 0 on success, -1 if full.
  • int queue_dequeue(iqueue_t *q, int *out) — return 0 on success, -1 if empty.

Starter code

#include <stdlib.h>
#include <stddef.h>

int  queue_init(iqueue_t *q, size_t cap){ /* TODO */ return -1; }
void queue_free(iqueue_t *q){ /* TODO */ }
int  queue_enqueue(iqueue_t *q, int v){ /* TODO */ return -1; }
int  queue_dequeue(iqueue_t *q, int *out){ /* TODO */ return -1; }

Solve this exercise in the browser editor — compile and run against the test harness, no setup required.