Generic Stack
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
Pushing elements onto doubleStack
1.1 2.2 3.3 4.4 5.5 6.6 Message: Stack is full, cannot push 6.6
at Stack`1.Push(E pushValue)
at StackTest.TestPushDouble()
Popping elements from doubleStack
5.5 4.4 3.3 2.2 1.1
Message: Stack is empty, cannot pop
at Stack`1.Pop()
at StackTest.TestPopDouble()
Pushing elements onto integerStack
1 2 3 4 5 6 7 8 9 10 11
Message: Stack is full, cannot push 11
at Stack`1.Push(E pushValue)
at StackTest.TestPushInteger()
Popping elements from integerStack
10 9 8 7 6 5 4 3 2 1
Message: Stack is empty, cannot pop
at Stack`1.Pop()
at StackTest.TestPopInteger()