采用后进先出(LIFO)模式的堆栈对很多程序都非常有用。本文中我会讲述如何使用vb实现一个后进先出的堆栈。
一般来说,堆栈有两种操作:Push用来将数据压入堆栈,而Pop用来从堆栈中提取数据。Push永远把数据放入堆栈的最顶端,而Pop永远读取堆栈顶端的数据。假设你按照以下顺序执行Push操作:
1. Push A
2. Push B
3. Push C
如果你之后又执行了三次Pop动作,那么首先获取的数据应该是C,第二次Pop获取的是B,最后获取的才是A。需要注意的是,堆栈在空的时候需要发出某种指示。
在vb中实现堆栈最好采用Class模块的方式。基本上,堆栈是一个存放数据的数组,其中有一个指针用来标示堆栈最“顶端”的数据。在一个Stack类中,我们使用动态数组以便可以随时将新的数据Push进堆栈。当数据从堆栈中提取出来时,数组不会改变大小以避免重复呼叫ReDim函数带来的开销。
Stack类的vb代码如下所示:
Private data() As Variant
Private pointer As Long
Private Sub Class_Initialize()
pointer = 0
ReDim data(1)
End Sub
Public Function Pop()
If pointer > 0 Then
Pop = data(pointer)
pointer = pointer - 1
Else
Pop = Null
End If
End Function
Public Sub Push(value)
pointer = pointer + 1
If UBound(data) < pointer Then
ReDim Preserve data(pointer)
End If
data(pointer) = value
End Sub