サーチ…


前書き

[TODO:このトピックは、すべての基本的なCS101データ構造の例であり、VBAでのデータ構造の実装方法の概要を説明するものです。これは、VBAドキュメントのクラス関連トピックに導入された概念を結びつけ、補強する良い機会になります。]

リンクされたリスト

このリンクされたリストの例は、 Set抽象データ型操作を実装しています。

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

バイナリツリー

これは、アンバランスなバイナリ検索ツリーのです 。バイナリツリーは概念的に、共通ルートから下に下がるノードの階層として構成されています。各ノードには、左と右の2つの子があります。たとえば、番号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クラス

[TODO]



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow