二分法实现的符号表
' 二分查找的符号表
' 隔离索引,从1开始,数组操作从0开始
' 这种设计隔离数组操作,只是为了方便理解,如果实际使用,可以修改为 从0开始,能节省不少操作。
Private keys()
Private values()
Private n As Long
' 暂时省略辅助的增加和缩减,如有需要,参照以前的博客
' 基本的符号表api
Private Sub class_initialize()
' 省略增加,适当加大
ReDim keys(100)
ReDim values(100)
End Sub
' 把值加入符号表中,如果值为空,就删除主键
Sub putValue(key As Variant, val As Variant)
Dim index As Long
Dim temp As Variant
index = rank(key)
Dim i As Long
' 需要考虑到相等的情况
' 终究是不太明白为什么index会大于n?哪种情况?
If index <= n And index > 0 Then
If getKeyByIndex(index) = key Then
setValueByIndex index, val
Exit Sub
End If
End If
For i = n + 1 To index + 2 Step -1
setKeyByIndex i, getKeyByIndex(i - 1)
setValueByIndex i, getValueByIndex(i - 1)
Next
setKeyByIndex index + 1, key
setValueByIndex index + 1, val
n = n +