Added Dynamic Stack

pull/1044/head
Danish-Belal 2022-10-16 11:57:41 +05:30
parent 5e09de59e5
commit aeeedf2cf0
1 changed files with 165 additions and 0 deletions

View File

@ -0,0 +1,165 @@
import java.io.*;
/*
1. You are given the code of our CustomStack class which mimics the java.util.Stack class.
2. Here is the list of functions that are written in the class...
2.1. push -> Accepts new data if there is space available in the underlying array or
print "Stack overflow" otherwise
2.2. pop -> Removes and returns last data if available or print "Stack underflow"
otherwise and returns -1
2.3. top -> Return last data if available or print "Stack underflow" otherwise and
returns -1
2.4. size -> Returns the number of elements available in the stack
2.5. display -> Print the elements of stack in LIFO manner (space-separated)
ending with a line-break.
3. Input and Output are managed for you.
4. You are required to change the body of push function to accept the element even when the data array is completely full.
In that case, you are required to reallocate the data array (to twice it's size). You should not print "Stack overflow" ever.
Sample Input
5
push 10
display
push 20
display
push 30
display
push 40
display
push 50
display
push 60
display
top
pop
display
top
pop
display
top
pop
display
top
pop
display
top
pop
display
top
pop
quit
Sample Output
10
20 10
30 20 10
40 30 20 10
50 40 30 20 10
60 50 40 30 20 10
60
60
50 40 30 20 10
50
50
40 30 20 10
40
40
30 20 10
30
30
20 10
20
20
10
10
10
*/
public class DynamicStack {
public static class CustomStack {
int[] data;
int tos;
public CustomStack(int cap) {
data = new int[cap];
tos = -1;
}
int size() {
return tos + 1;
}
void display() {
for (int i = tos; i >= 0; i--) {
System.out.print(data[i] + " ");
}
System.out.println();
}
// change the code of this function according to question
void push(int val) {
if (tos == data.length - 1) {
int[] oa = data;
data = new int[2*oa.length];
for (int i = 0; i < oa.length; i++) {
data[i] = oa[i];
}
}
tos++;
data[tos] = val;
}
int pop() {
if (tos == -1) {
System.out.println("Stack underflow");
return -1;
} else {
int val = data[tos];
tos--;
return val;
}
}
int top() {
if (tos == -1) {
System.out.println("Stack underflow");
return -1;
} else {
return data[tos];
}
}
}
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
CustomStack st = new CustomStack(n);
String str = br.readLine();
while (str.equals("quit") == false) {
if (str.startsWith("push")) {
int val = Integer.parseInt(str.split(" ")[1]);
st.push(val);
} else if (str.startsWith("pop")) {
int val = st.pop();
if (val != -1) {
System.out.println(val);
}
} else if (str.startsWith("top")) {
int val = st.top();
if (val != -1) {
System.out.println(val);
}
} else if (str.startsWith("size")) {
System.out.println(st.size());
} else if (str.startsWith("display")) {
st.display();
}
str = br.readLine();
}
}
}