#include <stdio.h> 
#include <unistd.h> // For sleep function 
#include <stdlib.h> 
#define BUCKET_CAPACITY 10 // Maximum capacity of the bucket 
#define LEAK_RATE 1         
second) 
typedef struct { 
// Rate at which the bucket leaks (units per 
int currentWater; // Current amount of water in the bucket 
} LeakyBucket; 
// Initialize the leaky bucket 
void initBucket(LeakyBucket *bucket) { 
bucket->currentWater = 0; 
} 
// Add data to the bucket 
int addWater(LeakyBucket *bucket, int water) { 
if (bucket->currentWater + water > BUCKET_CAPACITY) { 
printf("Bucket overflow! Excess water discarded.\n"); 
return 0; // Overflow occurred 
} 
bucket->currentWater += water; 
printf("Added %d units of water. Current level: %d\n", water, bucket
>currentWater); 
return 1; // Successfully added water 
} 
// Leak water from the bucket 
void leakWater(LeakyBucket *bucket) { 
if (bucket->currentWater > 0) { 
bucket->currentWater -= LEAK_RATE; 
if (bucket->currentWater < 0) { 
bucket->currentWater = 0; // Prevent negative water level 
} 
printf("Leaked 1 unit of water. Current level: %d\n", bucket
>currentWater); 
} 
} 
int main() { 
LeakyBucket bucket; 
initBucket(&bucket); 
// Simulate adding water and leaking over time 
for (int i = 0; i < 15; i++) { 
printf("\nCycle %d:\n", i + 1); 
// Add a random amount of water (1-5 units) 
int waterToAdd = rand() % 5 + 1; 
addWater(&bucket, waterToAdd); 
// Leak water 
leakWater(&bucket); 
// Sleep for 1 second to simulate time passing 
sleep(1); 
} 
return 0; 
} 
Output: 
Cycle 1: 
Added 3 units of water. Current level: 3 
Leaked 1 unit of water. Current level: 2 
Cycle 2: 
Added 1 units of water. Current level: 3 
Leaked 1 unit of water. Current level: 2 
Cycle 3: 
Added 4 units of water. Current level: 6 
Leaked 1 unit of water. Current level: 5 
... 
Cycle 15: 
Added 2 units of water. Current level: 9 
Leaked 1 unit of water. Current level: 8