Advertisement
nein_yards

Ordered Linked List Array Implementation 2.0

Jun 5th, 2020
118
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.39 KB | None | 0 0
  1. Module Module1
  2. Structure Node
  3. Dim data As Integer
  4. Dim nxt As Integer
  5. End Structure
  6. Const nullPointer As Integer = -1
  7. Class OrderedLinkedList
  8. Private head,
  9. freeListPointer,
  10. size As Integer
  11. Public node As Node()
  12. Public Sub New(size As Integer)
  13. Me.size = size
  14. If size < 0 Then : Exit Sub : End If
  15. ReDim node(size)
  16. head = nullPointer
  17. freeListPointer = 0
  18. For i = 0 To size - 1
  19. node(i).nxt = i + 1
  20. Next
  21. node(size).nxt = nullPointer
  22. End Sub
  23. Public Sub InsertNode(data As Integer)
  24. If size < 0 Then : Exit Sub : End If
  25. Dim newPointer,
  26. previousPointer,
  27. currentPointer As Integer
  28. If freeListPointer <> nullPointer Then
  29. newPointer = freeListPointer
  30. freeListPointer = node(freeListPointer).nxt
  31. node(newPointer).data = data
  32. currentPointer = head
  33. While currentPointer <> nullPointer
  34. If node(currentPointer).data > data Then
  35. Exit While : End If
  36. previousPointer = currentPointer
  37. currentPointer = node(currentPointer).nxt
  38. End While
  39.  
  40. If currentPointer = head Then
  41. node(newPointer).nxt = head
  42. head = newPointer
  43. Else
  44. node(newPointer).nxt = node(previousPointer).nxt
  45. node(previousPointer).nxt = newPointer
  46. End If
  47. Else : Console.WriteLine("ARRAY BOUNDS EXCEEDED")
  48. End If
  49. End Sub
  50. Public Sub DeleteNode(data As Integer)
  51. If size < 0 Then : Exit Sub : End If
  52. Dim previousPointer,
  53. currentPointer As Integer
  54. Dim deleteFound As Boolean = False
  55. If head <> nullPointer Then
  56. currentPointer = head
  57. While currentPointer <> nullPointer And
  58. Not deleteFound
  59. If node(currentPointer).data = data Then
  60. deleteFound = True
  61. Else
  62. previousPointer = currentPointer
  63. currentPointer = node(currentPointer).nxt
  64. End If
  65. End While
  66. If Not deleteFound Then : Exit Sub : End If
  67. freeListPointer = currentPointer
  68. If currentPointer = head Then
  69. head = node(currentPointer).nxt
  70. Else
  71. node(previousPointer).nxt = node(currentPointer).nxt
  72. End If
  73. Else : Console.WriteLine("ARRAY IS EMPTY - DELETION IMPOSSIBLE")
  74. End If
  75. End Sub
  76. Public Sub PrintList()
  77. Dim currentPointer As Integer = head
  78. While currentPointer <> nullPointer
  79. Console.Write(node(currentPointer).data)
  80. currentPointer = node(currentPointer).nxt
  81. If currentPointer <> nullPointer Then
  82. Console.Write(" -> ") : End If
  83. End While
  84. Console.WriteLine()
  85. End Sub
  86. Public Function FindNode(data As Integer) As Integer
  87. If size < 0 Then : Return nullPointer : End If
  88. Dim currentPointer As Integer
  89. Dim nodeFound As Boolean = False
  90. If head <> nullPointer Then
  91. currentPointer = head
  92. While currentPointer <> nullPointer And
  93. Not nodeFound
  94. If node(currentPointer).data = data Then
  95. nodeFound = True
  96. Else
  97. currentPointer = node(currentPointer).nxt
  98. End If
  99. End While
  100. If nodeFound Then
  101. Return currentPointer
  102. End If
  103. End If
  104. Return nullPointer
  105. End Function
  106. End Class
  107. Sub Main()
  108. Dim myList As New OrderedLinkedList(3)
  109. myList.InsertNode(110)
  110. myList.InsertNode(100)
  111. myList.InsertNode(60)
  112. myList.InsertNode(160)
  113. myList.PrintList()
  114. Console.ReadLine()
  115. End Sub
  116. End Module
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement