Поиск…


Вступление

[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

[СДЕЛАТЬ]



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow