0% found this document useful (0 votes)
3 views

Module ArraysStack

The document contains multiple modules for data structures in Visual Basic, including a stack, queue, linked list, and binary tree. Each module provides functionality to add and delete data, initialize structures, and output the current state to the console. The stack and queue modules utilize arrays for storage, while the linked list and binary tree modules implement linked structures with pointers for navigation.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
3 views

Module ArraysStack

The document contains multiple modules for data structures in Visual Basic, including a stack, queue, linked list, and binary tree. Each module provides functionality to add and delete data, initialize structures, and output the current state to the console. The stack and queue modules utilize arrays for storage, while the linked list and binary tree modules implement linked structures with pointers for navigation.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 9

Module ArraysStack

Dim NodeArrayData(4) As String


Dim NodeArrayPointer(4) As Integer
Dim StackPointer As Integer
Dim FreelistPointer As Integer
Sub main()
Dim Answer As Char
Dim DataToAdd, DataToDelete As String
InitialiseStack()
OutputListToConsole()
Do
Console.WriteLine("Do you want to add data to the stack, Y to
continue, any other to stop:")
Answer = Console.ReadLine()
Do While Answer = "Y"
Console.WriteLine("Please input data to add to stack:")
DataToAdd = Console.ReadLine()
AddToStack(DataToAdd)
OutputListToConsole()
Console.ReadKey()
Console.Clear()
Console.WriteLine("Do you want to add another data to the stack,
Y to continue, any other to stop:")
Answer = Console.ReadLine()
Loop
Console.WriteLine("Do you want to delete data from the stack, Y to
continue, any other to stop:")
Answer = Console.ReadLine()
Do While Answer = "Y"
Console.WriteLine("Please input data to delete from stack:")
DataToDelete = Console.ReadLine()
DeleteData(DataToDelete)
OutputListToConsole()
Console.ReadKey()
Console.Clear()
Console.WriteLine("Do you want to delete another data from the
stack, Y to continue, any other to stop:")
Answer = Console.ReadLine()
Loop
Console.WriteLine("Do you want to add or delete data from the stack,
any other to continue, N to stop:")
Answer = Console.ReadLine()
Loop Until Answer = "N"
OutputListToConsole()
Console.ReadKey()
End Sub
Sub InitialiseStack()
StackPointer = -1
FreelistPointer = 0
For i As Integer = 0 To 4
NodeArrayData(i) = ""
NodeArrayPointer(i) = i + 1
Next
NodeArrayPointer(4) = -1
End Sub
Sub OutputListToConsole()
For i As Integer = 0 To 4
Console.WriteLine(NodeArrayData(i) & " " & NodeArrayPointer(i))

1
Next
Console.WriteLine(StackPointer & " " & FreelistPointer)
End Sub
Sub AddToStack(ByVal NewData As String)
Dim TempPointer As Integer
If FreelistPointer = -1 Then
Console.WriteLine("Stack full, cannot add")
Else
TempPointer = FreelistPointer
NodeArrayData(FreelistPointer) = NewData
FreelistPointer = NodeArrayPointer(TempPointer)
NodeArrayPointer(TempPointer) = StackPointer
StackPointer = TempPointer
End If
End Sub
Sub DeleteData(ByVal NewData As String)
Dim TempPointer As Integer
If StackPointer = -1 Then
Console.WriteLine("Stack empty, cannot delete")
Else
If NodeArrayData(StackPointer) = NewData Then
NodeArrayData(StackPointer) = ""
TempPointer = StackPointer
StackPointer = NodeArrayPointer(TempPointer)
NodeArrayPointer(TempPointer) = FreelistPointer
FreelistPointer = TempPointer
Else
Console.WriteLine("Data at stack pointer is not data to be
deleted")
End If
End If
End Sub
End Module

Module ArraysQueue
Dim NodeArrayData(4) As String
Dim NodeArrayPointer(4) As Integer
Dim FrontPointer As Integer
Dim RearPointer As Integer
Dim FreelistPointer As Integer
Sub main()
Dim TempPointer As Integer
Dim Answer As Char
Dim DataToAdd, DataToDelete As String
InitialiseQueue()
OutputListToConsole()
Console.ReadKey()
Console.Clear()
Do
Console.WriteLine("Do you want to add data to the Queue, Y to
continue, any other to stop:")
Answer = Console.ReadLine()

2
Do While Answer = "Y"
Console.WriteLine("Please input data to add to Queue:")
DataToAdd = Console.ReadLine()
EnQueue(DataToAdd, TempPointer)
Console.WriteLine("Do you want to add another data to the Queue,
Y to continue, any other to stop:")
Answer = Console.ReadLine()
Loop
OutputListToConsole()
Console.ReadKey()
Console.Clear()
Console.WriteLine("Do you want to delete data from the queue, Y to
continue, any other to stop:")
Answer = Console.ReadLine()
Do While Answer = "Y"
Console.WriteLine("Please input data to delete from Queue:")
DataToDelete = Console.ReadLine()
DeQueue(DataToDelete, TempPointer)
Console.WriteLine("Do you want to delete another data from the
queue, Y to continue, any other to stop:")
Answer = Console.ReadLine()
Loop
OutputListToConsole()
Console.ReadKey()
Console.WriteLine("Do you want to Add or delete another data from the
queue, N to stop, any other to continue:")
Answer = Console.ReadLine()
Loop Until Answer = "N"
Console.ReadKey()
End Sub
Sub InitialiseQueue()
FrontPointer = -1
RearPointer = -1
FreelistPointer = 0
For i As Integer = 0 To 4
NodeArrayData(i) = ""
NodeArrayPointer(i) = i + 1
Next
NodeArrayPointer(4) = -1
End Sub
Sub OutputListToConsole()
For i As Integer = 0 To 4
Console.WriteLine(NodeArrayData(i) & " " & NodeArrayPointer(i))
Next
Console.WriteLine(FrontPointer & " " & RearPointer & " " &
FreelistPointer)
End Sub
Sub EnQueue(ByVal NewData As String, ByRef TempPointer As Integer)
Dim Maximun As Integer = 5
If FreelistPointer = -1 Then
Console.WriteLine("Queue full, cannot add")
Else
If FrontPointer = -1 Then
FrontPointer = 0
RearPointer = 0
Else
TempPointer = RearPointer
If RearPointer = Maximun - 1 Then

3
RearPointer = 0
NodeArrayPointer(TempPointer) = RearPointer
Else
RearPointer = RearPointer + 1
NodeArrayPointer(TempPointer) = RearPointer
End If
End If
NodeArrayData(RearPointer) = NewData
FreelistPointer = NodeArrayPointer(FreelistPointer)
NodeArrayPointer(RearPointer) = -1
End If
End Sub
Sub DeQueue(ByVal NewData As String, ByRef TempPointer As Integer)
Dim Maximun As Integer = 5
Select Case True
Case FrontPointer = -1
Console.WriteLine("Queue is empty, cannot delete")
Case NodeArrayData(FrontPointer) <> NewData
Console.WriteLine("Data at front pointer is not data to delete")
Case FrontPointer = RearPointer
NodeArrayData(FrontPointer) = ""
NodeArrayPointer(TempPointer) = FrontPointer
NodeArrayPointer(FrontPointer) = -1
TempPointer = 0
RearPointer = -1
FrontPointer = -1
Case FrontPointer = Maximun - 1
NodeArrayData(FrontPointer) = ""
NodeArrayPointer(FreelistPointer) = FrontPointer
NodeArrayPointer(FrontPointer) = -1
FrontPointer = 0
Case FrontPointer = 0
NodeArrayData(FrontPointer) = ""
FreelistPointer = FrontPointer
TempPointer = FrontPointer
NodeArrayPointer(FrontPointer) = -1
FrontPointer = FrontPointer + 1
Case FrontPointer < RearPointer
NodeArrayData(FrontPointer) = ""
NodeArrayPointer(TempPointer) = FrontPointer
TempPointer = FrontPointer
NodeArrayPointer(FrontPointer) = -1
FrontPointer = FrontPointer + 1
Case FreelistPointer = -1 And FrontPointer > RearPointer
NodeArrayData(FrontPointer) = ""
FreelistPointer = FrontPointer
NodeArrayPointer(FrontPointer) = -1
FrontPointer = FrontPointer + 1
Case Else
NodeArrayData(FrontPointer) = ""
NodeArrayPointer(FreelistPointer) = FrontPointer
NodeArrayPointer(FrontPointer) = -1
FrontPointer = FrontPointer + 1
End Select
End Sub
End Module

4
Module ArraysLinkedList
Dim NodeArrayData(5) As String
Dim NodeArrayPointer(5) As Integer
Dim HeadPointer As Integer
Dim FreelistPointer As Integer
Sub main()
Dim Answer As Char
Dim DataToAdd, DataToDelete As String
InitialiseLL()
OutputListToConsole()
Do
Console.WriteLine("Do you want to add data to the Linked list, Y to
continue, any other to stop:")
Answer = Console.ReadLine()
Do While Answer = "Y"
Console.WriteLine("Please input data to add to Linked list:")
DataToAdd = Console.ReadLine()
AddToLL(DataToAdd)
OutputListToConsole()
Console.ReadKey()
Console.Clear()
Console.WriteLine("Do you want to add another data to the Linked
list, Y to continue, any other to stop:")
Answer = Console.ReadLine()
Loop
Console.WriteLine("Do you want to delete data from the Linked list,
Y to continue, any other to stop:")
Answer = Console.ReadLine()
Do While Answer = "Y"
Console.WriteLine("Please input data to delete from Linked
list:")
DataToDelete = Console.ReadLine()
DeleteData(DataToDelete)
OutputListToConsole()
Console.ReadKey()
Console.Clear()
Console.WriteLine("Do you want to delete another data from the
Linked list, Y to continue, any other to stop:")
Answer = Console.ReadLine()
Loop
Console.WriteLine("Do you want to add or delete data from the Linked
list, any other to continue, N to stop:")
Answer = Console.ReadLine()
Loop Until Answer = "N"
OutputListToConsole()
Console.ReadKey()
End Sub
Sub InitialiseLL()
HeadPointer = -1
FreelistPointer = 0
For i As Integer = 0 To 5
NodeArrayData(i) = ""
NodeArrayPointer(i) = i + 1
Next
NodeArrayPointer(5) = -1
End Sub

5
Sub OutputListToConsole()
For i As Integer = 0 To 5
Console.WriteLine(NodeArrayData(i) & " " & NodeArrayPointer(i))
Next
Console.WriteLine(HeadPointer & " " & FreelistPointer)
End Sub
Sub AddToLL(ByVal NewData As String)
Dim NewNodePointer, PreviousPointer, NextPointer As Integer
NewNodePointer = FreelistPointer
If FreelistPointer <> -1 Then
FreelistPointer = NodeArrayPointer(FreelistPointer)
Else
Console.WriteLine("Cannot add data as list is full")
Exit Sub
End If
NodeArrayData(NewNodePointer) = NewData
If HeadPointer = -1 Then
HeadPointer = NewNodePointer
NodeArrayPointer(NewNodePointer) = -1
Else
FindInsertionPoint(NewData, PreviousPointer, NextPointer)
If PreviousPointer = -1 Then
NodeArrayPointer(NewNodePointer) = HeadPointer
HeadPointer = NewNodePointer
Else
NodeArrayPointer(NewNodePointer) = NextPointer
NodeArrayPointer(PreviousPointer) = NewNodePointer
End If
End If
End Sub
Sub FindInsertionPoint(ByVal NewData As String, ByRef PreviousPointer As
Integer, ByRef NextPointer As Integer)
Dim Ptr As Integer = HeadPointer
If NewData < NodeArrayData(Ptr) Then
PreviousPointer = -1
NextPointer = Ptr
Else
Do While NewData > NodeArrayData(Ptr)
PreviousPointer = Ptr
Ptr = NodeArrayPointer(Ptr)
NextPointer = Ptr
If Ptr = -1 Then
Exit Do
End If
Loop
End If
End Sub
Sub DeleteData(ByVal NewData As String)
Dim CurrentPointer, PrevPointer As Integer
CurrentPointer = HeadPointer
If CurrentPointer = HeadPointer And NewData =
NodeArrayData(CurrentPointer) Then
HeadPointer = NodeArrayPointer(CurrentPointer)
NodeArrayPointer(CurrentPointer) = FreelistPointer
FreelistPointer = CurrentPointer
Else
FindPreviousPoint(NewData, CurrentPointer, PrevPointer)

6
If NodeArrayPointer(CurrentPointer) = -1 And NewData =
NodeArrayData(CurrentPointer) Then
NodeArrayPointer(CurrentPointer) = FreelistPointer
FreelistPointer = CurrentPointer
NodeArrayPointer(PrevPointer) = -1
Else
If NewData = NodeArrayData(CurrentPointer) Then
NodeArrayPointer(PrevPointer) =
NodeArrayPointer(CurrentPointer)
NodeArrayPointer(CurrentPointer) = FreelistPointer
FreelistPointer = CurrentPointer
End If
End If
End If
NodeArrayData(CurrentPointer) = ""
End Sub

Sub FindPreviousPoint(ByVal NewData As String, ByRef CurrentPointer As


Integer, ByRef PrevPointer As Integer)
CurrentPointer = HeadPointer
Do While NewData <> NodeArrayData(CurrentPointer)
PrevPointer = CurrentPointer
CurrentPointer = NodeArrayPointer(CurrentPointer)
Loop
End Sub
End Module

Module ArraysBinTree
Dim TreeArrayLeftPointer(9) As Integer
Dim TreeArrayData(9) As String
Dim TreeArrayRightPointer(9) As Integer
Dim RootPointer As Integer
Dim FreelistPointer As Integer
Sub main()
Dim Answer As Char
Dim DataToAdd As String
InitialiseTree()
OutputListToConsole()
Console.WriteLine("Do you want to add data to the Tree, Y to continue,
any other to stop:")
Answer = Console.ReadLine()
Do While Answer = "Y"
Console.WriteLine("Please input data to add to Tree:")
DataToAdd = Console.ReadLine()
AddToTree(DataToAdd)
OutputListToConsole()
Console.ReadKey()
Console.Clear()
Console.WriteLine("Do you want to add another data to the Tree, Y to
continue, any other to stop:")
Answer = Console.ReadLine()
Loop
Console.ReadKey()
End Sub
Sub InitialiseTree()
RootPointer = -1

7
FreelistPointer = 0
For i As Integer = 0 To 9
TreeArrayLeftPointer(i) = i + 1
TreeArrayData(i) = ""
TreeArrayRightPointer(i) = -1
Next
TreeArrayLeftPointer(9) = -1
End Sub
Sub OutputListToConsole()
For i As Integer = 0 To 9
Console.WriteLine(TreeArrayLeftPointer(i) & " " & TreeArrayData(i) &
" " & TreeArrayRightPointer(i))
Next
Console.WriteLine(RootPointer & " " & FreelistPointer)
End Sub
Sub AddToTree(ByVal NewData As String)
Dim NewNodePointer, PreviousPointer As Integer
Dim Direction As Char
NewNodePointer = FreelistPointer
If FreelistPointer <> -1 Then
FreelistPointer = TreeArrayLeftPointer(FreelistPointer)
Else
Console.WriteLine("Cannot add data as Tree is full")
Exit Sub
End If
TreeArrayData(NewNodePointer) = NewData
TreeArrayLeftPointer(NewNodePointer) = -1
If RootPointer = -1 Then
RootPointer = NewNodePointer
Else
FindDirectionPoint(NewData, PreviousPointer, Direction)
If Direction = "L" Then
TreeArrayLeftPointer(PreviousPointer) = NewNodePointer
Else
If Direction = "R" Then
TreeArrayRightPointer(PreviousPointer) = NewNodePointer
End If
End If
End If
End Sub
Sub FindDirectionPoint(ByVal NewData As String, ByRef PreviousPointer As
Integer, ByRef Direction As Char)
Dim Current As Integer = RootPointer
Do
PreviousPointer = Current
If NewData < TreeArrayData(Current) Then
Direction = "L"
Current = TreeArrayLeftPointer(Current)
Else
If NewData > TreeArrayData(Current) Then
Direction = "R"
Current = TreeArrayRightPointer(Current)
End If
End If
Loop Until Current = -1
End Sub
End Module

8
9

You might also like