86. Circular Buffer Read

Back To All Submissions
Previous Submission
Next Submission

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.

 

 

Was this helpful?
Upvote
Downvote