w3resource

C#: Sort the elements of a stack in descending order

C# Sharp Stack: Exercise-2 with Solution

Write a C# program to sort the elements of a given stack in descending order.

Sample Solution:

C# Code:

using System;
// Implementation of a Stack data structure
public class Stack
{
    private int[] items; // Array to hold stack elements
    private int top;     // Index representing the top of the stack
    // Constructor to initialize the stack with a specified size
    public Stack(int size)
    {
        items = new int[size]; // Initializing the array with the given size
        top = -1;              // Initializing top to -1, indicating an empty stack
    }
    // Method to check if the stack is empty
    public bool IsEmpty()
    {
        return top == -1; // Returns true if top is -1 (empty stack), otherwise false
    }
    // Method to check if the stack is full
    public bool IsFull()
    {
        return top == items.Length - 1; // Returns true if top is at the last index of the array (full stack)
    }
    // Method to push an element onto the stack
    public void Push(int item)
    {
        if (IsFull())
        {
            Console.WriteLine("Stack Full!"); // Displays a message if the stack is full
            return;
        }
        items[++top] = item; // Inserts the item at the incremented top index
    }
    // Method to pop an element from the stack
    public int Pop()
    {
        if (IsEmpty())
        {
            Console.WriteLine("Stack underflow"); // Displays a message if the stack is empty
            return -1;
        }
        return items[top--]; // Removes and returns the top element by decrementing top
    }
    // Method to peek at the top element of the stack without removing it
    public int Peek()
    {
        if (IsEmpty())
        {
            Console.WriteLine("Stack is empty"); // Displays a message if the stack is empty
            return -1;
        }
        return items[top]; // Returns the element at the top index without removing it
    }
    // Method to get the current size of the stack
    public static int Size(Stack stack)
    {
        return stack.top + 1; // Returns the number of elements in the stack
    }
    // Method to sort the stack elements in descending order
    public static void SortDescending(Stack stack)
    {
        if (stack.IsEmpty())
        {
            Console.WriteLine("Stack is empty");
            return;
        }
        // Creating a temporary stack to hold sorted elements
        Stack tempStack = new Stack(stack.items.Length);
        // Sorting elements in descending order
        while (!stack.IsEmpty())
        {
            int currentItem = stack.Pop();
            while (!tempStack.IsEmpty() && currentItem > tempStack.Peek())
            {
                stack.Push(tempStack.Pop());
            }
            tempStack.Push(currentItem);
        }
        while (!tempStack.IsEmpty())
        {
            stack.Push(tempStack.Pop());
        }
    }

    // Method to display the stack elements
    public static void Display(Stack stack)
    {
        if (stack.IsEmpty())
        {
            Console.WriteLine("Stack is empty");
            return;
        }
        Console.WriteLine("Stack elements:");
        for (int i = stack.top; i >= 0; i--)
        {
            Console.Write(stack.items[i] + " "); // Displays each element in the stack
        }
    }
}
// Main class to demonstrate the functionality of the Stack class
public class Program
{
    public static void Main(string[] args)
    {
        Console.WriteLine("Initialize a stack:");
        Stack stack = new Stack(10); // Creating a stack with a size of 10
        Console.WriteLine("\nInput some elements onto the stack:");
        stack.Push(1);
        stack.Push(3);
        stack.Push(3);
        stack.Push(9);
        stack.Push(5);
        Stack.Display(stack); // Displaying the elements in the stack
        Stack.SortDescending(stack); // Sorting stack elements in descending order
        Console.WriteLine("\nStack elements in descending order:");
        Stack.Display(stack); // Displaying the sorted elements
        Console.WriteLine("\nInput two more elements onto the stack:");
        stack.Push(0);
        stack.Push(10);
        Stack.Display(stack);
        Console.WriteLine("\nStack elements in descending order:");
        Stack.SortDescending(stack); // Sorting stack elements again in descending order
        Stack.Display(stack); // Displaying the sorted elements
    }
}

Sample Output:

Initialize a stack:

Input some elements onto the stack:
Stack elements:
5 9 3 3 1 
Stack elements in descending order:
Stack elements:
9 5 3 3 1 
Input two more elements onto the stack:
Stack elements:
10 0 9 5 3 3 1 
Stack elements in descending order:
Stack elements:
10 9 5 3 3 1 0 

Flowchart:

Flowchart: Sort the elements of a stack in descending order.
Flowchart: Sort the elements of a stack in descending order.
Flowchart: Sort the elements of a stack in descending order.

C# Sharp Code Editor:

Improve this sample solution and post your code through Disqus

Previous: Implement a stack with push and pop operations.
Next: Sort the elements of a stack in ascending order.

What is the difficulty level of this exercise?

Test your Programming skills with w3resource's quiz.



Become a Patron!

Follow us on Facebook and Twitter for latest update.

It will be nice if you may share this link in any developer community or anywhere else, from where other developers may find this content. Thanks.

https://www.w3resource.com/csharp-exercises/stack/csharp-stack-exercise-2.php