Public Class MainClass Public Shared Sub Main() Dim stack As Stack = New Stack()
Dim aBoolean As Boolean = True Dim aCharacter As Char = Convert.ToChar("$") Dim anInteger As Integer = 34 Dim aString As String = "www.java2s.com"
stack.Push(aBoolean)
Console.WriteLine(stack)
stack.Push(aCharacter)
Console.WriteLine(stack)
stack.Push(anInteger)
Console.WriteLine(stack)
stack.Push(aString)
Console.WriteLine(stack)
Dim removedObject As Object = Nothing
Try
While True
removedObject = stack.Pop()
Console.WriteLine(removedObject & " popped")
Console.WriteLine(stack) End While Catch emptyListException As EmptyListException
Console.Error.WriteLine(emptyListException.StackTrace) End Try End Sub End Class
Public Class Stack Inherits List
Public Sub New()
MyBase.New("stack") End Sub ' New
Public Sub Push(ByVal dataValue As Object)
MyBase.InsertAtFront(dataValue) End Sub ' Push Public Function Pop() As Object
Return MyBase.RemoveFromFront() End Function
End Class
Public Class List Private firstNode As ListNode Private lastNode As ListNode Private name As String
Public Sub New(ByVal listName As String)
name = listName
firstNode = Nothing
lastNode = Nothing End Sub
Public Sub New()
MyClass.New("list") End Sub
Public Sub InsertAtFront(ByVal insertItem As Object)
SyncLock (Me) If IsEmpty() Then
lastNode = New ListNode(insertItem)
firstNode = lastNode
Else
firstNode = New ListNode(insertItem, firstNode) End If End SyncLock
End Sub
Public Sub InsertAtBack(ByVal insertItem As Object)
SyncLock (Me) If IsEmpty() Then
lastNode = New ListNode(insertItem)
firstNode = lastNode
Else
lastNode.NextNode = New ListNode(insertItem)
lastNode = lastNode.NextNode End If End SyncLock End Sub
Public Function RemoveFromFront() As Object
SyncLock (Me) Dim removeItem As Object = Nothing
If IsEmpty() Then
Throw New EmptyListException(name) End If
removeItem = firstNode.Data If firstNode Is lastNode Then
firstNode = Nothing
lastNode = Nothing
Else
firstNode = firstNode.NextNode End If
Return removeItem End SyncLock
End Function
Public Function RemoveFromBack() As Object
SyncLock (Me) Dim removeItem As Object = Nothing If IsEmpty() Then
Throw New EmptyListException(name) End If
removeItem = lastNode.Data
If firstNode Is lastNode Then
lastNode = Nothing
firstNode = lastNode
Else Dim current As ListNode = firstNode
While (Not (current.NextNode Is lastNode))
current = current.NextNode End While
lastNode = current
current.NextNode = Nothing End If
Return removeItem End SyncLock End Function
Public Function IsEmpty() As Boolean
SyncLock (Me) If firstNode Is Nothing Then
Return True
Else
Return False End If End SyncLock End Function
Public Overrides Function ToString() As String Dim str As String = New String("")
SyncLock (Me) If IsEmpty() Then
Return "Empty " & name End If
str = "The " & name & " is: " Dim current As ListNode = firstNode
While Not current Is Nothing
str += current.Data & " "
current = current.NextNode End While
Return str
End SyncLock End Function
End Class
Public Class ListNode Private mData As Object Private mNextNode As ListNode
Public Sub New(ByVal dataValue As Object)
MyClass.New(dataValue, Nothing) End Sub
Public Sub New(ByVal dataValue As Object, _
ByVal nextNodeValue As Object)
mData = dataValue
mNextNode = nextNodeValue End Sub
Public ReadOnly Property Data() As Object
Get
Return mData End Get End Property
Public Property NextNode() As ListNode
Get
Return mNextNode End Get
Set(ByVal value As ListNode)
mNextNode = value End Set
End Property
End Class
Public Class EmptyListException Inherits ApplicationException
Public Sub New(ByVal name As String)
MyBase.New("The " & name & " is empty") End Sub