Advertisement
nein_yards

Array Ordered Linked List 1.0

Sep 30th, 2020 (edited)
137
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.31 KB | None | 0 0
  1. Module Module1
  2. Const nullPtr As Integer = -1
  3. Dim head As Integer
  4. Dim freeListPtr As Integer
  5.  
  6. Structure LinkedListNode
  7. Public data As Integer
  8. Public nxt As Integer
  9. End Structure
  10.  
  11. Sub insertNode(ByRef node() As LinkedListNode, data As Integer)
  12. 'adds node to ordered linked list
  13. Dim newNodePtr, previousPtr, currentPtr As Integer
  14. If freeListPtr <> nullPtr Then
  15. newNodePtr = freeListPtr
  16. freeListPtr = node(freeListPtr).nxt
  17. node(newNodePtr).data = data
  18. currentPtr = head
  19. While currentPtr <> nullPtr
  20. If node(currentPtr).data > data Then
  21. Exit While
  22. End If
  23. previousPtr = currentPtr
  24. currentPtr = node(currentPtr).nxt
  25. End While
  26. If currentPtr = head Then
  27. node(newNodePtr).nxt = head
  28. head = newNodePtr
  29. Else
  30. node(newNodePtr).nxt = node(previousPtr).nxt
  31. node(previousPtr).nxt = newNodePtr
  32. End If
  33. Else
  34. Console.Error.WriteLine("Bound Error : Linked List bounds exceeded.")
  35. End If
  36. End Sub
  37.  
  38. Sub removeNode(ByRef node() As LinkedListNode, data As Integer)
  39. 'removes node from ordered linked list
  40. Dim previousPtr, currentPtr As Integer
  41. Dim deleteFound As Boolean
  42. If head <> nullPtr Then
  43. currentPtr = head
  44. While currentPtr <> nullPtr And Not deleteFound
  45. If node(currentPtr).data > data Then
  46. Exit While
  47. ElseIf node(currentPtr).data < data Then
  48. previousPtr = currentPtr
  49. currentPtr = node(currentPtr).nxt
  50. Else
  51. deleteFound = True
  52. End If
  53. End While
  54. If Not deleteFound Then
  55. Console.WriteLine("Node with data '" & data & "' not found - no deletes made.")
  56. Exit Sub
  57. End If
  58. freeListPtr = currentPtr
  59. If currentPtr = head Then
  60. head = node(currentPtr).nxt
  61. Else
  62. node(previousPtr).nxt = node(currentPtr).nxt
  63. End If
  64. Else
  65. Console.Error.WriteLine("Underflow Error : Cannot delete node when Linked List is empty.")
  66. End If
  67. End Sub
  68.  
  69. Sub dumpLinkedList(node() As LinkedListNode)
  70. 'displays contents of variables
  71. Console.WriteLine("head ptr " & head)
  72. Console.WriteLine("free ptr " & freeListPtr)
  73. Console.WriteLine(Environment.NewLine)
  74. Console.WriteLine("DATA NEXT")
  75. For Each struct In node
  76. Console.WriteLine(struct.data & " " & struct.nxt)
  77. Next
  78. End Sub
  79.  
  80. Sub displayLinkedList(node() As LinkedListNode)
  81. 'displays linked list with arrows
  82. Dim currentPtr As Integer = head
  83. Dim listToString As String
  84. If currentPtr <> nullPtr Then
  85. listToString = node(currentPtr).data
  86. While node(currentPtr).nxt <> nullPtr
  87. currentPtr = node(currentPtr).nxt
  88. listToString = listToString & " -> " & node(currentPtr).data
  89. End While
  90. Console.WriteLine(listToString)
  91. End If
  92. End Sub
  93. Sub Main()
  94. Dim myLinkedList() As LinkedListNode
  95. myLinkedList = newLinkedList(5)
  96.  
  97. insertNode(myLinkedList, 6)
  98. insertNode(myLinkedList, 2)
  99. insertNode(myLinkedList, 8)
  100. insertNode(myLinkedList, 9)
  101. insertNode(myLinkedList, 12)
  102. insertNode(myLinkedList, 5)
  103. removeNode(myLinkedList, 8)
  104. insertNode(myLinkedList, 3)
  105.  
  106. displayLinkedList(myLinkedList)
  107. Console.ReadLine()
  108. End Sub
  109.  
  110. Function newLinkedList(maxIndex As Integer) As LinkedListNode()
  111. If maxIndex < 1 Then
  112. Console.Error.WriteLine("Index Error : Linked List max index cannot be less than 1.")
  113. End If
  114. head = nullPtr
  115. freeListPtr = 0
  116. Dim node(maxIndex) As LinkedListNode
  117. For i = 0 To maxIndex - 1
  118. node(i).nxt = i + 1
  119. Next
  120. node(maxIndex).nxt = nullPtr
  121. Return node
  122. End Function
  123. End Module
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement