Ricerca…
introduzione
[TODO: Questo argomento dovrebbe essere un esempio di tutte le strutture di dati CS 101 di base insieme ad alcune spiegazioni come una panoramica di come le strutture dati possono essere implementate in VBA. Questa sarebbe una buona opportunità per legare e rafforzare i concetti introdotti negli argomenti relativi alla Classe nella documentazione VBA.]
Lista collegata
Questo esempio di elenco collegato implementa le operazioni sui tipi di dati astratti .
Classe 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
Classe 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
Albero binario
Questo è un esempio di albero di ricerca binaria sbilanciato. Un albero binario è strutturato concettualmente come una gerarchia di nodi discendente verso il basso da una radice comune, in cui ogni nodo ha due figli: sinistra e destra. Ad esempio, supponiamo che i numeri 7, 5, 9, 3, 11, 6, 12, 14 e 15 siano stati inseriti in un BinaryTree. La struttura sarebbe come qui sotto. Si noti che questo albero binario non è bilanciato , il che può essere una caratteristica auspicabile per garantire le prestazioni delle ricerche - vedi gli alberi AVL per un esempio di albero di ricerca binaria autobilanciante.
7
/ \
5 9
/ \ \
3 6 11
\
12
\
14
\
15
Classe BinaryTreeNode
Option Explicit
Public left As BinaryTreeNode
Public right As BinaryTreeNode
Public key As Variant
Public value As Variant
Classe BinaryTree
[FARE]