Wednesday, July 3, 2019

Sort a stack


    Problem Statement:


Given a stack, the task is to sort it such that the top of the stack has the greatest element.

Input:
The first line of input will contains an integer T denoting the no of test cases . Then T test cases follow. Each test case contains an integer N denoting the size of the stack. Then in the next line are N space separated values which are pushed to the the stack.

Output:
For each test case output will be the popped elements from the sorted stack.

Constraints:
1<=T<=100
1<=N<=100

Example(To be used only for expected output):
Input:

2
3
3 2 1
5
11 2 32 3 41

Output:
3 2 1
41 32 11 3 2

Explanation:
For first test case stack will be
1
2
3
After sorting
3
2
1

When elements  popped : 3 2 1


Solution:

 

import java.util.Scanner;
import java.util.Stack;
class SortedStack{
    public static void main(String[] args)
   {
        Scanner sc=new Scanner(System.in);
        int t=sc.nextInt();
        while(t-->0)
       {
            Stack<Integer> s=new Stack<>();
            int n=sc.nextInt();
            while(n-->0)
            s.push(sc.nextInt());
            MuscleJava g=new MuscleJava();
            Stack<Integer> a=g.sort(s);
            while(!a.empty()){
                System.out.print(a.peek()+" ");
                a.pop();
            }
            System.out.println();
        }
    }
}

class MuscleJava
{
    public Stack<Integer> sort(Stack<Integer> s)
    {
        Stack<Integer> t = new Stack<Integer>();
        while(s.size() > 0)
        {
            if(t.empty() || t.peek() < s.peek() )
                t.push(s.pop());
            else
            {
                int temp = s.pop();
                while(t.size() > 0 && t.peek() >= temp)
                {
                    s.push(t.pop());
                }
                t.push(temp);
            }
        }
        return t;
    }

No comments:

Post a Comment