All submissions

Circular Buffer Read

Code

#include <stdio.h>

typedef struct {
    int buffer[10];
    int head;
    int tail;
    int count;
    int capacity;
} CircularBuffer;

void read_bytes(CircularBuffer *cb, int n) {
    if(cb->count == 0){
        return; 
    }
    
    for(int i = 0; i < n; i++){
        
        if(cb->count == 0){
            if(i == n - 1){
                printf("NULL");
            }
            else{
                printf("NULL ");
            }
        }
        else{
          if(i == n - 1){
             printf("%d", cb->buffer[cb->tail]);
          }
          else{
            printf("%d ", cb->buffer[cb->tail]);
          }
          
          cb->count--; 
          cb->tail = (cb->tail + 1) % cb->capacity;
          
        }
    }

    printf("\nTail: %d", cb->tail);
}

int main() {
    CircularBuffer cb = {
        .buffer = {10, 20, 30, 40, 50, 60, 70, 80, 90, 100},
        .head = 3,
        .tail = 7,
        .count = 6,
        .capacity = 10
    };

    int n;
    scanf("%d", &n);
    read_bytes(&cb, n);

    return 0;
}

Solving Approach

Got the correct solution but the trailing space at the end of the answers was not passing the test case, therefore had to implement an extra logic.

 

 

Loading...

Input

4

Expected Output

80 90 100 10 Tail: 1