Module StackTest
Dim doubleElements() As Double = {1.1, 2.2, 3.3, 4.4, 5.5, 6.6}
Dim integerElements() As Integer = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}
Dim doubleStack As Stack(Of Double)
Dim integerStack As Stack(Of Integer)
Sub Main()
doubleStack = New Stack(Of Double)(5)
integerStack = New Stack(Of Integer)(10)
TestPushDouble()
TestPopDouble()
TestPushInteger()
TestPopInteger()
End Sub
Sub TestPushDouble()
Try
Console.WriteLine("Pushing elements onto doubleStack")
For Each element As Double In doubleElements
Console.Write("{0:F1} ", element)
doubleStack.Push(element)
Next element
Catch exception As GenericStackException
Console.Error.WriteLine("Message: " & exception.Message)
Console.Error.WriteLine(exception.StackTrace)
End Try
End Sub
Sub TestPopDouble()
Try
Console.WriteLine("Popping elements from doubleStack")
Dim popValue As Double
While True
popValue = doubleStack.Pop()
Console.Write("{0:F1} ", popValue)
End While
Catch exception As GenericStackException
Console.Error.WriteLine()
Console.Error.WriteLine("Message: " & exception.Message)
Console.Error.WriteLine(exception.StackTrace)
End Try
End Sub
Sub TestPushInteger()
Try
Console.WriteLine("Pushing elements onto integerStack")
For Each element As Integer In integerElements
Console.Write("{0} ", element)
integerStack.Push(element) ' push onto integerStack
Next element
Catch exception As GenericStackException
Console.Error.WriteLine()
Console.Error.WriteLine("Message: " & exception.Message)
Console.Error.WriteLine(exception.StackTrace)
End Try
End Sub
Sub TestPopInteger()
Try
Console.WriteLine("Popping elements from integerStack")
Dim popValue As Integer
While True
popValue = integerStack.Pop()
Console.Write("{0} ", popValue)
End While
Catch exception As GenericStackException
Console.Error.WriteLine()
Console.Error.WriteLine("Message: " & exception.Message)
Console.Error.WriteLine(exception.StackTrace)
End Try
End Sub
End Module
Public Class Stack(Of E)
Private top As Integer
Private elements() As E
Public Sub New()
MyClass.New(10)
End Sub ' New
Public Sub New(ByVal stackSize As Integer)
If stackSize > 0 Then
elements = New E(stackSize - 1) {}
Else
elements = New E(9) {}
End If
top = -1
End Sub ' New
Public Sub Push(ByVal pushValue As E)
If top = elements.Length - 1 Then
Throw New GenericStackException(String.Format("Stack is full, cannot push {0}", pushValue))
End If
top += 1
elements(top) = pushValue
End Sub
Public Function Pop() As E
If top = -1 Then
Throw New GenericStackException("Stack is empty, cannot pop")
End If
top -= 1
Return elements(top + 1)
End Function
End Class
Public Class GenericStackException : Inherits ApplicationException
Public Sub New()
MyBase.New("Stack is empty")
End Sub ' New
Public Sub New(ByVal exception As String)
MyBase.New(exception)
End Sub
End Class
|