Queue Stack Reverse Polish Notation C# Exercise - C# Programming Course

 Exercise

Queue Stack Reverse Polish Notation

 Objetive

Create a program that reads a Reverse Polish Notation expression from a text file, 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 need to transfer them from the queue to a stack using the Queue and Stack classes provided in C#.

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

 Example Code

// Importing the necessary namespaces for basic functionalities and collections
using System; // For basic functionalities like Console
using System.Collections.Generic; // For using the Queue and Stack classes
using System.IO; // For reading from a file

class Program
{
    static void Main(string[] args)
    {
        // Reading the Reverse Polish Notation (RPN) expression from a file
        string filePath = "rpn_expression.txt"; // File where the RPN expression is stored
        if (!File.Exists(filePath))
        {
            Console.WriteLine("The file does not exist.");
            return;
        }

        // Read the contents of the file (RPN expression)
        string[] rpnExpression = File.ReadAllText(filePath).Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);

        // Create a Queue to store the elements from the RPN expression
        Queue queue = new Queue();

        // Enqueue the elements of the RPN expression into the queue
        foreach (var item in rpnExpression)
        {
            queue.Enqueue(item);
        }

        // Create a Stack to evaluate the RPN expression
        Stack stack = new Stack();

        // Process each element in the queue, transferring to the stack and calculating the result
        while (queue.Count > 0)
        {
            string current = queue.Dequeue(); // Dequeue the next element from the queue

            if (IsOperator(current))
            {
                // If it's an operator, pop two values from the stack, perform the operation and push the result
                int operand2 = stack.Pop();
                int operand1 = stack.Pop();
                int result = PerformOperation(operand1, operand2, current);
                stack.Push(result);
            }
            else
            {
                // If it's a number, push it onto the stack
                stack.Push(int.Parse(current));
            }
        }

        // The result of the RPN expression will be the last item in the stack
        if (stack.Count == 1)
        {
            Console.WriteLine($"Result: {stack.Pop()}");
        }
        else
        {
            Console.WriteLine("Invalid RPN expression.");
        }
    }

    // Helper method to check if a string is an operator
    static bool IsOperator(string str)
    {
        return str == "+" || str == "-" || str == "*" || str == "/";
    }

    // Helper method to perform the operation based on the operator
    static int PerformOperation(int operand1, int operand2, string operatorSymbol)
    {
        switch (operatorSymbol)
        {
            case "+":
                return operand1 + operand2;
            case "-":
                return operand1 - operand2;
            case "*":
                return operand1 * operand2;
            case "/":
                return operand1 / operand2;
            default:
                throw new InvalidOperationException("Invalid operator.");
        }
    }
}

More C# Exercises of Dynamic Memory Management

 Implementing a queue using array
Implementing a queue...
 Implementing a stack using array
Implementing a stack...
 Queue Collections
Create a string queue using the Queue class that already exists in the DotNet platform....
 ArrayList
Create a string list using the ArrayList class that already exists in the .NET platform. Once created, display all the items stored in the list. In...
 ArrayList duplicate a text file
Create a program that reads from a text file and stores it to another text file by reversing the order of lines. For example, an input text file li...
 Unlimited sum
Create a program to allow the user to enter an unlimited amount of numbers. Also, they can enter the following commands: "sum", to display the sum of...
 ArrayList - Text file reader
provide your basic text file reader here, which displays 21 lines of text and allows the user to navigate using the up and down arrow keys, and exit u...
 Hast Table - Dictionary
Submit your dictionary here using a hash table....
 Parenthesis
Implement a function to check if a sequence of open and closed parentheses is balanced. In other words, check if each open parenthesis corresponds to ...
 Mix and sort files
Create a program that reads the contents of two different files, merges them, and sorts them alphabetically. For example, if the files contain: "Dog C...
 ArrayList of Points
Create a structure named "Point3D" to represent a point in 3D space with coordinates X, Y, and Z. Create a program that has a menu where the user c...
 Search in file
Create a program that reads a text file, saves its content to an ArrayList, and asks the user to enter sentences to search within the file. The pro...

Juan A. Ripoll - Programming Tutorials and Courses © 2025 All rights reserved.  Legal Conditions.