Stack implementation in Java
March 12, 2013 6 Comments
Stacks operate in LIFO model.
Stack plays vital role in many data structures, some of them are
- in parsing arithmetic expressions
- to help traverse nodes of binary tree
- searching vertices of a graph
- in java, every method’s return type and arguments are pushed on to a stack and when method returns they are popped off.
Efficiency of stack is that it performs push and pop operations in O(1) complexity.
package algorithm.stack;
/**
* @author ntallapa
*
*/
public class TNStack {
private int size;
private int[] stackArr;
private int top = -1;
public TNStack(int size) {
this.size = size;
stackArr = new int[size];
}
/**
* increment the ctr and push element into stack
* @param i element to be pushed
*/
public void push(int i) {
top++;
System.out.println("Pushing "+i);
stackArr[top] = i;
}
/**
* pop the element from stack and decrement the ctr
* @return the popped element
*/
public int pop() {
int i = stackArr[top];
top--;
System.out.println("Popping "+i);
return i;
}
public int peek() {
System.out.println("Peek "+stackArr[top]);
return stackArr[top];
}
public boolean isFull() {
return (top == size-1);
}
public boolean isEmpty() {
return (top == -1);
}
}
package algorithm.stack;
/**
* @author ntallapa
*
*/
public class TNStackClient {
/**
* @param args
*/
public static void main(String[] args) {
TNStack tns = new TNStack(3);
// push some elements
if(!tns.isFull())
tns.push(4);
if(!tns.isFull())
tns.push(5);
if(!tns.isFull())
tns.push(3);
if(!tns.isFull())
tns.push(6);
else
System.out.println("Stack is full, cannot push element");
// pop some elements
if(!tns.isEmpty())
tns.pop();
if(!tns.isEmpty())
tns.pop();
if(!tns.isEmpty())
tns.pop();
if(!tns.isEmpty())
tns.pop();
else
System.out.println("Stack is empty, cannot pop element");
//reinsert to verify peek method
if(!tns.isFull())
tns.push(6);
// peek couple of times; result should be same
tns.peek();
tns.peek();
}
}
Output:
Pushing 4
Pushing 5
Pushing 3
Stack is full, cannot push element
Popping 3
Popping 5
Popping 4
Stack is empty, cannot pop element
Pushing 6
Peek 6
Peek 6
Pingback: algorithm to reverse a string in O(n/2) complexity | java tech stack
Pingback: decimal to binary/octa/hexadecimal conversion | java tech stack
does algorithm.stack in present in java jdk is it inbuilt???
yes it is @java.util.Stack
how do we implement if we need to dynamically deallocate memory when pop() is used?
I think in push() and pop() method you need to check for isFull() or isEmpty() to ensure when popping out an element from stack should not throw “ArrayIndexOutOfBoundException”