Поиск…
Вступление
[TODO: Эта тема должна быть примером всех базовых структур данных CS 101, а также некоторое объяснение как обзор того, как структуры данных могут быть реализованы в VBA. Это было бы хорошей возможностью связать и укрепить концепции, включенные в связанные с классом темы в документации VBA.]
Связанный список
Этот пример связанного списка реализует операции набора абстрактных данных .
Класс SinglyLinkedNode
Option Explicit
Private Value As Variant
Private NextNode As SinglyLinkedNode '"Next" is a keyword in VBA and therefore is not a valid variable name
Класс LinkedList
Option Explicit
Private head As SinglyLinkedNode
'Set type operations
Public Sub Add(value As Variant)
Dim node As SinglyLinkedNode
Set node = New SinglyLinkedNode
node.value = value
Set node.nextNode = head
Set head = node
End Sub
Public Sub Remove(value As Variant)
Dim node As SinglyLinkedNode
Dim prev As SinglyLinkedNode
Set node = head
While Not node Is Nothing
If node.value = value Then
'remove node
If node Is head Then
Set head = node.nextNode
Else
Set prev.nextNode = node.nextNode
End If
Exit Sub
End If
Set prev = node
Set node = node.nextNode
Wend
End Sub
Public Function Exists(value As Variant) As Boolean
Dim node As SinglyLinkedNode
Set node = head
While Not node Is Nothing
If node.value = value Then
Exists = True
Exit Function
End If
Set node = node.nextNode
Wend
End Function
Public Function Count() As Long
Dim node As SinglyLinkedNode
Set node = head
While Not node Is Nothing
Count = Count + 1
Set node = node.nextNode
Wend
End Function
Двоичное дерево
Это пример несбалансированного дерева двоичного поиска . Бинарное дерево структурировано концептуально как иерархия узлов, нисходящих вниз от общего корня, где каждый узел имеет двух детей: слева и справа. Например, предположим, что числа 7, 5, 9, 3, 11, 6, 12, 14 и 15 были вставлены в BinaryTree. Структура будет такой, как показано ниже. Обратите внимание, что это двоичное дерево не сбалансировано , что может быть желательным признаком гарантирования производительности поисковых запросов - см. Деревья AVL на примере самобалансирующегося двоичного дерева поиска.
7
/ \
5 9
/ \ \
3 6 11
\
12
\
14
\
15
Класс BinaryTreeNode
Option Explicit
Public left As BinaryTreeNode
Public right As BinaryTreeNode
Public key As Variant
Public value As Variant
Класс BinaryTree
[СДЕЛАТЬ]