.. _min_heap_api: Min-Heap Data Structure ####################### .. contents:: :local: :depth: 2 The Min-Heap implementation provides an efficient data structure for managing a dynamically changing list of elements while maintaining the ability to quickly extract the minimum value. It's a tree-based data structure that satisfies the heap property and supports common operations such as insertion, removal and popping the minimum element from the Min-Heap This section explains the motivation behind the implementation, its internal structure, API usage, and example scenarios for embedded systems and real-time environments. Heap Structure ************** The heap is maintained as a complete binary tree stored in an array. Each node satisfies the **min-heap** property: - The value of each node is less than or equal to the values of its children. This property ensures that the **minimum element is always at the root** (index 0). .. code-block:: text Index: 0 1 2 3 4 5 6 Values: [1, 3, 5, 8, 9, 10, 12] 1 / \ 3 5 / \ / \ 8 9 10 12 For any node at index ``i``, its children are at indices: - Left child: :math:`2*i + 1` - Right child: :math:`2*i + 2` Its parent is at index: - Parent: :math:`(i - 1) / 2` Use Cases ********* MinHeap is well suited for: - Implementing priority queues - Sorting data incrementally - Resource arbitration (e.g., lowest-cost resource selection) - Scheduling in cooperative multitasking systems - Managing timeouts and delay queues - Priority-based sensor or data sampling In RTOS environments like Zephyr, this heap can be used in kernel-level or application-level modules where minimal latency to obtain the highest priority resource is needed. Samples ******* :zephyr:code-sample:`min-heap` sample demos the API usage of Min-Heap implementation in Zephyr RTOS. API Reference ************* .. doxygengroup:: min_heap_apis