type StreamPriorityQueueData struct {
type StreamPriorityQueue struct {
caches []StreamPriorityQueueData
func NewStreamPriorityQueue(size int) *StreamPriorityQueue {
return &StreamPriorityQueue{
caches: make([]StreamPriorityQueueData, size),
func (q *StreamPriorityQueue) GetQueueTop() StreamPriorityQueueData {
return StreamPriorityQueueData{}
func (q *StreamPriorityQueue) EnQueue(data StreamPriorityQueueData) {
if q.size == q.capacity {
for i = q.size; q.caches[i/2].key > data.key; i /= 2 {
q.caches[i] = q.caches[i/2]
func (q *StreamPriorityQueue) DeQueue() StreamPriorityQueueData {
minElements := q.caches[1]
lastElements := q.caches[(q.size)]
for i = 1; i*2 <= q.size; i = child {
if child != q.size && (q.caches[child+1].key < q.caches[child].key) {
if lastElements.key > q.caches[child].key {
q.caches[i] = q.caches[child]
q.caches[i] = lastElements
q := NewStreamPriorityQueue(8)
d := StreamPriorityQueueData{
d1 := StreamPriorityQueueData{
d2 := StreamPriorityQueueData{
d3 := StreamPriorityQueueData{
d4 := StreamPriorityQueueData{
