ISC Computer Science 2014
Question 12.
A stack is a linear data structure which enables the user to add and remove integers from the end only, using the concept of LIFO( Last In First Out). An array containing the marks of 50 students in ascending order is to be pushed into the stack.
Define a class Array_to_Stack with the following details:
Class: Array_to_Stack
Data members/instance variables:
m[] : to store the marks st[]: to store the stack elements cap : maximum capacity of the array and stack top : to point the index of the topmost element of the stack
Method/member functions:
Array_to_Stack(int n): parametrized constructor to initialize cap=n and top=-1 void input_marks() : to input the marks from the user and store it in the array m[] in ascending order and simultaneously push the marks into the stack st[] by invoking the function pushmarks() int popmarks() : to return marks from the stack if possible, otherwise, return -999 void display() : To display the stack elements
Specify the class Array_to_Stack, giving the details of the constructor(int), void input_marks(), void pushmarks(int), int popmarks() and void display().
The main function and the algorithm need not be written.
Implementation of the class Array_to_Stack is as follows:
import java.util.*; class Array_to_Stack{ private int m[], st[], cap, top; public Array_to_Stack( int n ){ m = new int[ n ]; st = new int[ n ]; cap = n; top = -1; } public void input_marks(){ Scanner sc = new Scanner( System.in ); System.out.println("Enter " + m.length + " marks(int): "); for( int i = 0; i < m.length; i++ ){ m[ i ] = sc.nextInt(); } } public void pushmarks( int v ){ if( top == st.length - 1 ){ System.out.println("not possible"); }else{ st[ ++top ] = v; } } public int popmarks(){ if( top == -1 ){ return -999; }else{ return st[ top-- ]; } } public void display(){ System.out.println("Stack elements( top on the left )"); for( int i = top; top < st.length; i++ ){ System.out.print( st[ i ] + " "); } System.out.println(); } }
I would like to point out that question is asking to specifically print a message in case of overflow and underflow. This is not a best or recommended practise. Refer to my earlier post Stack in Java for a better way to do the same thing. Also note that there is no need to store the capacity (cap) as an instance variable because the capacity is always available as st.length. I have included it in the solution because the question explicitly asked for it.