Mega Code Archive

 
Categories / VB.Net / Data Structure
 

Our Stack based on our List

Imports System 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.rntsoft.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  End Class