Stack Implementation in Java

1. Introduction

A stack is a linear data structure that follows the Last In First Out (LIFO) principle. This means that the last element added to the stack will be the first element to be removed. Stacks are commonly used in algorithms, data processing, and for many system functionalities like call stack management.

2. Implementation Steps

1. Define a Stack class.

2. Within the class:

  1. Declare an array of a fixed size or use an ArrayList to store the stack elements.
  2. Declare a variable top to keep track of the topmost element in the stack.
  3. Provide methods like push(), pop(), peek(), and isEmpty().

3. Create an instance of the stack class and perform operations to demonstrate its functionality.

3. Implementation in Java

public class Stack<T> { private int top; // To keep track of the topmost element private final int capacity = 100; // Maximum size of the stack private Object[] stack; // Constructor public Stack() { top = -1; stack = new Object[capacity]; } // Check if the stack is empty public boolean isEmpty() { return top == -1; } // Add element to the stack public void push(T data) { if (top == capacity - 1) { System.out.println("Stack is full. Can't push the data."); return; } stack[++top] = data; } // Remove and return top element from the stack public T pop() { if (isEmpty()) { System.out.println("Stack is empty. Can't pop."); return null; } return (T) stack[top--]; } // View top element without removing it public T peek() { if (isEmpty()) { System.out.println("Stack is empty. Nothing to peek."); return null; } return (T) stack[top]; } public static void main(String[] args) { Stack<Integer> stack = new Stack<>(); stack.push(10); stack.push(20); stack.push(30); System.out.println("Top element: " + stack.peek()); // Outputs 30 System.out.println("Popped element: " + stack.pop()); // Outputs 30 System.out.println("Top element after pop: " + stack.peek()); // Outputs 20 } } 

Output:

Top element: 30 Popped element: 30 Top element after pop: 20 

Explanation:

1. A generic Stack class is defined. This allows us to use the stack with any data type.

2. An array stack of Objects and a top variable are declared to store stack elements and track the topmost element respectively.

3. The isEmpty() method checks whether the stack is empty by comparing the top variable with -1.

4. The push() method adds an element to the stack. It checks for overflow (when the stack is full) by comparing the top with capacity - 1.

5. The pop() method removes and returns the topmost element from the stack. It checks for underflow (when the stack is empty) using the isEmpty() method.

6. The peek() method returns the topmost element without removing it.

7. In the main() method, we create a Stack of Integers, push three elements onto it, and perform some operations to demonstrate its functionality.


Comments