#include int main(void) { printf("Initial heap: free[0-9] used[10-19] free[20-29]\n"); printf("Free list: addr=0 len=10 -> addr=20 len=10\n"); printf("Allocate 1 byte from second free chunk:\n"); printf("Returned pointer: 20\n"); printf("Updated free list: addr=0 len=10 -> addr=21 len=9\n"); printf("Free the middle used block (addr=10):\n"); printf("Without coalescing: addr=10 len=10 -> addr=0 len=10 -> addr=21 len=9\n"); printf("With coalescing: addr=0 len=30\n"); return 0; }