level 8
冰之源___
楼主
Public Class Priority_Queue
Friend Element() As Integer
Friend point As Integer ReadOnly Property Top As Integer
Get
Try
Return Element(1)
Catch ex As Exception
Return 0
End Try
End Get
End Property
ReadOnly Property Size As Integer
Get
Return point
End Get
End Property
ReadOnly Property Empty As Boolean
Get
If point = 0 Then Return True
Return False
End Get
End Property Sub push(ByVal _ele_val As Integer)
point += 1
Element(point) = _ele_val
Dim Now As Integer = point
Dim Nxt As Integer = Now / 2
While (Now <> 1 AndAlso Element(Now) > Element(Nxt))
Swap(Element(Now), Element(Nxt))
Now = Nxt
Nxt /= 2
End While
End Sub
Sub pop()
Dim now As Integer = 1 Element(1) = Element(point)
point -= 1 While (1) Dim left As Integer = 0
Dim right As Integer = 0 If (now * 2 <= point) Then
left = Element(now * 2)
End If
If (now * 2 + 1 <= point) Then
right = Element(now * 2 + 1)
End If If (right = left And right = 0) Then
Exit Sub
End If If (Element(now) < left OrElse Element(now) < right) Then
If left > right Then
Swap(Element(now), Element(now * 2))
now *= 2
Else
Swap(Element(now), Element(now * 2 + 1))
now *= 2
now += 1
End If
Else
Exit While
End If
End While End Sub Sub New(ByVal _size As Integer)
ReDim Element(_size)
point = 0
End Sub
Protected Overrides Sub Finalize()
MyBase.Finalize()
End Sub End Class
2017年10月21日 10点10分
1
Friend Element() As Integer
Friend point As Integer ReadOnly Property Top As Integer
Get
Try
Return Element(1)
Catch ex As Exception
Return 0
End Try
End Get
End Property
ReadOnly Property Size As Integer
Get
Return point
End Get
End Property
ReadOnly Property Empty As Boolean
Get
If point = 0 Then Return True
Return False
End Get
End Property Sub push(ByVal _ele_val As Integer)
point += 1
Element(point) = _ele_val
Dim Now As Integer = point
Dim Nxt As Integer = Now / 2
While (Now <> 1 AndAlso Element(Now) > Element(Nxt))
Swap(Element(Now), Element(Nxt))
Now = Nxt
Nxt /= 2
End While
End Sub
Sub pop()
Dim now As Integer = 1 Element(1) = Element(point)
point -= 1 While (1) Dim left As Integer = 0
Dim right As Integer = 0 If (now * 2 <= point) Then
left = Element(now * 2)
End If
If (now * 2 + 1 <= point) Then
right = Element(now * 2 + 1)
End If If (right = left And right = 0) Then
Exit Sub
End If If (Element(now) < left OrElse Element(now) < right) Then
If left > right Then
Swap(Element(now), Element(now * 2))
now *= 2
Else
Swap(Element(now), Element(now * 2 + 1))
now *= 2
now += 1
End If
Else
Exit While
End If
End While End Sub Sub New(ByVal _size As Integer)
ReDim Element(_size)
point = 0
End Sub
Protected Overrides Sub Finalize()
MyBase.Finalize()
End Sub End Class


