Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Module Module1
- Const nullPtr As Integer = -1
- Dim head As Integer
- Dim freeListPtr As Integer
- Structure LinkedListNode
- Public data As Integer
- Public nxt As Integer
- End Structure
- Sub insertNode(ByRef node() As LinkedListNode, data As Integer)
- 'adds node to ordered linked list
- Dim newNodePtr, previousPtr, currentPtr As Integer
- If freeListPtr <> nullPtr Then
- newNodePtr = freeListPtr
- freeListPtr = node(freeListPtr).nxt
- node(newNodePtr).data = data
- currentPtr = head
- While currentPtr <> nullPtr
- If node(currentPtr).data > data Then
- Exit While
- End If
- previousPtr = currentPtr
- currentPtr = node(currentPtr).nxt
- End While
- If currentPtr = head Then
- node(newNodePtr).nxt = head
- head = newNodePtr
- Else
- node(newNodePtr).nxt = node(previousPtr).nxt
- node(previousPtr).nxt = newNodePtr
- End If
- Else
- Console.Error.WriteLine("Bound Error : Linked List bounds exceeded.")
- End If
- End Sub
- Sub removeNode(ByRef node() As LinkedListNode, data As Integer)
- 'removes node from ordered linked list
- Dim previousPtr, currentPtr As Integer
- Dim deleteFound As Boolean
- If head <> nullPtr Then
- currentPtr = head
- While currentPtr <> nullPtr And Not deleteFound
- If node(currentPtr).data > data Then
- Exit While
- ElseIf node(currentPtr).data < data Then
- previousPtr = currentPtr
- currentPtr = node(currentPtr).nxt
- Else
- deleteFound = True
- End If
- End While
- If Not deleteFound Then
- Console.WriteLine("Node with data '" & data & "' not found - no deletes made.")
- Exit Sub
- End If
- freeListPtr = currentPtr
- If currentPtr = head Then
- head = node(currentPtr).nxt
- Else
- node(previousPtr).nxt = node(currentPtr).nxt
- End If
- Else
- Console.Error.WriteLine("Underflow Error : Cannot delete node when Linked List is empty.")
- End If
- End Sub
- Sub dumpLinkedList(node() As LinkedListNode)
- 'displays contents of variables
- Console.WriteLine("head ptr " & head)
- Console.WriteLine("free ptr " & freeListPtr)
- Console.WriteLine(Environment.NewLine)
- Console.WriteLine("DATA NEXT")
- For Each struct In node
- Console.WriteLine(struct.data & " " & struct.nxt)
- Next
- End Sub
- Sub displayLinkedList(node() As LinkedListNode)
- 'displays linked list with arrows
- Dim currentPtr As Integer = head
- Dim listToString As String
- If currentPtr <> nullPtr Then
- listToString = node(currentPtr).data
- While node(currentPtr).nxt <> nullPtr
- currentPtr = node(currentPtr).nxt
- listToString = listToString & " -> " & node(currentPtr).data
- End While
- Console.WriteLine(listToString)
- End If
- End Sub
- Sub Main()
- Dim myLinkedList() As LinkedListNode
- myLinkedList = newLinkedList(5)
- insertNode(myLinkedList, 6)
- insertNode(myLinkedList, 2)
- insertNode(myLinkedList, 8)
- insertNode(myLinkedList, 9)
- insertNode(myLinkedList, 12)
- insertNode(myLinkedList, 5)
- removeNode(myLinkedList, 8)
- insertNode(myLinkedList, 3)
- displayLinkedList(myLinkedList)
- Console.ReadLine()
- End Sub
- Function newLinkedList(maxIndex As Integer) As LinkedListNode()
- If maxIndex < 1 Then
- Console.Error.WriteLine("Index Error : Linked List max index cannot be less than 1.")
- End If
- head = nullPtr
- freeListPtr = 0
- Dim node(maxIndex) As LinkedListNode
- For i = 0 To maxIndex - 1
- node(i).nxt = i + 1
- Next
- node(maxIndex).nxt = nullPtr
- Return node
- End Function
- End Module
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement