87. Peek N Bytes from Circular Buffer

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;

// Write your logic inside this function
void peek_bytes(CircularBuffer *c, int n) {
    
    int p = c->tail;
    int count =c->count;
    for(int i=0;i<n;i++){

        if(count==0){
            printf("NULL");
        }
        else{
        printf("%d",c->buffer[p]);
        p = (p+1)%c->capacity;
        count--;
        }

        if(i<n-1)
            printf(" ");
    }
}

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);

    peek_bytes(&cb, n);

    return 0;
}


//without using extra variables
// void peek_bytes(CircularBuffer *cb, int n) {
//     for(int i = 0;i < n;i++)
//     {
//         if(cb->count <= i)// count values are from head to tail, other values in the buffere are old values
//         {
//             printf("NULL");
//         }
//         else{
//             printf("%d",cb->buffer[((cb->tail)+ i)%cb->capacity]);
//         }

//         if(i!=n-1) printf(" ");    
//     }
// }

Solving Approach

 

 

 

Was this helpful?
Upvote
Downvote