Last active
January 10, 2024 16:17
-
-
Save itszechs/f15a40e4692624235918cd00257972a9 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| interface Stack { | |
| void pop(); | |
| void push(int data); | |
| int top(); | |
| void print(); | |
| int size(); | |
| boolean isEmpty(); | |
| } | |
| class StackUsingArray implements Stack { | |
| private final int[] stack; | |
| private final int capacity; | |
| private int size = 0; | |
| public StackUsingArray(int capacity) { | |
| stack = new int[capacity]; | |
| this.capacity = capacity; | |
| } | |
| @Override | |
| public void pop() { | |
| if (size <= 0) { | |
| throw new IllegalStateException("Stack is empty."); | |
| } | |
| size--; | |
| } | |
| @Override | |
| public void push(int data) { | |
| if (size >= capacity) { | |
| throw new IllegalStateException("Stack is full."); | |
| } | |
| stack[size] = data; | |
| size++; | |
| } | |
| @Override | |
| public int top() { | |
| if (size < 0) { | |
| throw new IllegalStateException("Stack is empty"); | |
| } | |
| return stack[size - 1]; | |
| } | |
| @Override | |
| public void print() { | |
| for (int i = size - 1; i >= 0; i--) { | |
| System.out.print(stack[i] + " "); | |
| } | |
| System.out.println(); | |
| } | |
| @Override | |
| public int size() { | |
| return size; | |
| } | |
| @Override | |
| public boolean isEmpty() { | |
| return size == 0; | |
| } | |
| } | |
| class StackUsingLinkedList implements Stack { | |
| private DoublyNode head = null; | |
| private DoublyNode last = null; | |
| private int size = 0; | |
| @Override | |
| public void pop() { | |
| last = last.prev; | |
| size--; | |
| } | |
| @Override | |
| public void push(int data) { | |
| DoublyNode newNode = new DoublyNode(data); | |
| if (head == null) { | |
| head = newNode; | |
| last = head; | |
| } else { | |
| newNode.prev = last; | |
| last.next = newNode; | |
| last = newNode; | |
| } | |
| size++; | |
| } | |
| @Override | |
| public int top() { | |
| return last.data; | |
| } | |
| @Override | |
| public void print() { | |
| DoublyNode temp = last; | |
| while (temp != null) { | |
| System.out.print(temp.data + " "); | |
| temp = temp.prev; | |
| } | |
| System.out.println(); | |
| } | |
| @Override | |
| public int size() { | |
| return size; | |
| } | |
| @Override | |
| public boolean isEmpty() { | |
| return size == 0; | |
| } | |
| } | |
| class StackExample { | |
| public static void main(String[] args) { | |
| testStack(new StackUsingArray(50)); | |
| testStack(new StackUsingLinkedList()); | |
| } | |
| private static void testStack(Stack myStack) { | |
| myStack.push(1); | |
| myStack.push(2); | |
| myStack.push(3); | |
| System.out.print("Stack after push operations: "); | |
| myStack.print(); | |
| System.out.println("Top element: " + myStack.top()); | |
| myStack.pop(); | |
| System.out.print("Stack after pop operation: "); | |
| myStack.print(); | |
| System.out.println("Top element: " + myStack.top()); | |
| System.out.println("Size of the stack: " + myStack.size()); | |
| System.out.println("Is the stack empty? " + myStack.isEmpty()); | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment