Skip to content

Instantly share code, notes, and snippets.

@hocyadav
Created November 2, 2019 18:46
Show Gist options
  • Save hocyadav/34ff84e7f951dea387c18379fc34414b to your computer and use it in GitHub Desktop.
Save hocyadav/34ff84e7f951dea387c18379fc34414b to your computer and use it in GitHub Desktop.
Reverse stack using recursion : 1st insert at bottom of stack method, 2nd function call stack concept used
/**
*
* @author Hariom Yadav - Nov 3, 2019
*
*/
class Stack1{
//know something
int top;
int size;
String[] stack;
//does something
Stack1(){
top = -1; size = 10;
stack = new String[size];
}
void push(String s) {
if(top == size-1) {
System.out.println("overflow"); return;
}
stack[++top] = s;
}
void pop() {
if(top == -1) {
System.out.println("underflow"); return;
}
--top;
}
String top() {
if(isEmpty()) {
System.out.println("empty");
return "-1";
}else
return stack[top];
}
boolean isEmpty() {
return (top == -1)?true:false;
}
void traverse() {
System.out.print("stack : ");
for(int i=0; i<=top; i++) {
System.out.print(stack[i]+" ");
}
System.out.println("");
}
}
public class Stack_Reverse_usingRecursion {
//know something
static Stack1 obj = new Stack1();
//does something
public static void main(String[] arg) {
obj.push("4");obj.traverse();
obj.push("3");obj.traverse();
obj.push("2");obj.traverse();
obj.push("1");obj.traverse();
obj.push("11");obj.traverse();
reverse(obj);
obj.traverse();
}
//imp : store variable in fun call stack
private static void reverse(Stack1 obj) {
if(obj.isEmpty()) {
return;
}else {//1.get top element, 2.delete top element, 3.call 1-2 again(i.e. call recursion), 4.insert_at_bottom
String s = obj.top();//1
obj.pop();//2
reverse(obj);//3
insert_at_bottom(s);
}
}
//store variable in fun call stack
private static void insert_at_bottom(String s) {
if(obj.isEmpty()) {
obj.push(s);
}else {
String topStr = obj.top();
obj.pop();
insert_at_bottom(s);
obj.push(topStr);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment