Skip to content

Instantly share code, notes, and snippets.

@itszechs
Last active January 10, 2024 16:17
Show Gist options
  • Select an option

  • Save itszechs/f15a40e4692624235918cd00257972a9 to your computer and use it in GitHub Desktop.

Select an option

Save itszechs/f15a40e4692624235918cd00257972a9 to your computer and use it in GitHub Desktop.
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