, node . Enqueue() , :
void enqueue( data_t val )
{
back->m_data = val;
if (back->m_data <= m_Min->m_data)
{
m_Min = back;
}
else
{
swap(back->m_data, m_Min->m_data);
m_Min = back;
}
}
, , dequeue extract_min O (1).
data_t dequeue( )
{
data_t front_data = front->m_data;
prev_front = front;
front = front->next;
dump prev_front;
return front_data;
}
, front m_Min, , .
data_t min()
{
return m_Min->m_data;
}
EDIT:. if-block enqueue() . enqueue() . node, min ( node ).
, 5, 3, 7, 1, 4, 6, 8.
1.
front -> 5 <- back
^min
2.
front -> 5 3 <- back.
^min
front -> 5 3 <- back.
^min
3.
front -> 5 3 7 <- back
^min
front -> 5 7 3 <- back
^min
4.
front -> 5 7 3 1 <- back
^min
front -> 5 7 3 1 <- back
^min
5.
front -> 5 7 3 1 4 <- back
^min
front -> 5 7 3 4 1 <- back
^min
6.
front -> 5 7 3 4 1 6 <- back
^min
front -> 5 7 3 4 6 1 <- back
^min
7.
front -> 5 7 3 4 6 1 8 <- back
^min
front -> 5 7 3 4 6 8 1 <- back
^min
, 3 , :
front -> 4 6 8 1 <- back
^min
, , front min, , min.