Queue Stack Reverse Polish Notation Learn programming Visual Basic (VB.net)

Lesson:

Dynamic Memory Management


Exercise:

Queue Stack Reverse Polish Notation 56


Objetive:

Create a program that reads from a text file one expression in Reverse Polish Notation like, for example:

3 4 6 5 - + * 6 +
(Result 21)

Each item will be stored in a queue.

Once the queue has all the items stored, you will have to store them from the queue to a stack (using class Queue and Stack provided in Visual Basic (VB.net)).

Finally, you will operate with the stack in order to get the correct result of the expression in RPN, and you will show it by console.


Code:

Imports System
Imports System.Collections.Generic
Imports System.IO
Imports System.Collections
Namespace FileTextQueue
    Class Program
        Private Shared Sub Main(ByVal args As String())
            Console.Write("Introduce el nombre del archivo: ")
            Dim nombreFichero As String = Console.ReadLine()

            If Not File.Exists(nombreFichero) Then
                Console.Write("El archivo no existe")
                Return
            End If

            Try
                Dim depurando As Boolean = True
                Dim ficheroTexto As StreamReader
                ficheroTexto = File.OpenText(nombreFichero)
                Dim line As String = " "
                Dim micola As Queue = New Queue()

                Do
                    line = ficheroTexto.ReadLine()
                    If line IsNot Nothing Then micola.Enqueue(line)
                Loop While line IsNot Nothing

                ficheroTexto.Close()
                Dim miPila As Stack = New Stack()
                Dim numero1 As Integer = 0, numero2 As Integer = 0
                Dim cantidadCola As Integer = micola.Count
                Dim valorCola As String
                Dim valores_linea As String()

                For i As Integer = 0 To cantidadCola - 1
                    valorCola = CStr(micola.Dequeue())
                    valores_linea = valorCola.Split(" "c)

                    For c As Integer = 0 To valores_linea.Length - 1

                        Select Case valores_linea(c)
                            Case "+"
                                numero1 = Convert.ToInt32(miPila.Pop())
                                numero2 = Convert.ToInt32(miPila.Pop())
                                miPila.Push(numero2 + numero1)
                            Case "-"
                                numero1 = Convert.ToInt32(miPila.Pop())
                                numero2 = Convert.ToInt32(miPila.Pop())
                                miPila.Push(numero2 - numero1)
                            Case "*"
                                numero1 = Convert.ToInt32(miPila.Pop())
                                numero2 = Convert.ToInt32(miPila.Pop())
                                miPila.Push(numero2 * numero1)
                            Case "/"
                                numero1 = Convert.ToInt32(miPila.Pop())
                                numero2 = Convert.ToInt32(miPila.Pop())
                                miPila.Push(numero2 / numero1)
                            Case Else
                                miPila.Push(valores_linea(c))
                        End Select
                    Next

                    For j As Integer = 0 To miPila.Count - 1
                        Console.WriteLine(miPila.Pop())
                    Next
                Next

                If depurando Then Console.ReadLine()
            Catch e As Exception
                Console.WriteLine("Error, " & e.Message)
            End Try
        End Sub
    End Class
End Namespace