From c7bab1c7fa041370c70b116977aab78e60fd33b0 Mon Sep 17 00:00:00 2001 From: Daniel Date: Sat, 4 Nov 2023 22:59:52 +0200 Subject: [PATCH] Added Stacks + Implementations + Queue Intf --- .idea/encodings.xml | 2 + .idea/misc.xml | 1 + Lab4/pom.xml | 17 +++++ .../java/org/lumijiez/intf/LumiQueue.java | 11 ++++ .../java/org/lumijiez/intf/LumiStack.java | 11 ++++ .../org/lumijiez/stacks/ArrayLumiStack.java | 65 +++++++++++++++++++ .../stacks/DynamicArrayLumiStack.java | 65 +++++++++++++++++++ .../lumijiez/stacks/LinkedListLumiStack.java | 46 +++++++++++++ 8 files changed, 218 insertions(+) create mode 100644 Lab4/pom.xml create mode 100644 Lab4/src/main/java/org/lumijiez/intf/LumiQueue.java create mode 100644 Lab4/src/main/java/org/lumijiez/intf/LumiStack.java create mode 100644 Lab4/src/main/java/org/lumijiez/stacks/ArrayLumiStack.java create mode 100644 Lab4/src/main/java/org/lumijiez/stacks/DynamicArrayLumiStack.java create mode 100644 Lab4/src/main/java/org/lumijiez/stacks/LinkedListLumiStack.java diff --git a/.idea/encodings.xml b/.idea/encodings.xml index 228e9f1..fcd3bfa 100644 --- a/.idea/encodings.xml +++ b/.idea/encodings.xml @@ -3,5 +3,7 @@ + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index d56e9ca..c449b97 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -8,6 +8,7 @@ diff --git a/Lab4/pom.xml b/Lab4/pom.xml new file mode 100644 index 0000000..18cb798 --- /dev/null +++ b/Lab4/pom.xml @@ -0,0 +1,17 @@ + + + 4.0.0 + + org.lumijiez + Lab4 + 1.0-SNAPSHOT + + + 17 + 17 + UTF-8 + + + \ No newline at end of file diff --git a/Lab4/src/main/java/org/lumijiez/intf/LumiQueue.java b/Lab4/src/main/java/org/lumijiez/intf/LumiQueue.java new file mode 100644 index 0000000..d5a94ef --- /dev/null +++ b/Lab4/src/main/java/org/lumijiez/intf/LumiQueue.java @@ -0,0 +1,11 @@ +package org.lumijiez.intf; + +public interface LumiQueue { + void enqueue(E item); + E dequeue(); + E peek(); + boolean isEmpty(); + int size(); + void clear(); +} + diff --git a/Lab4/src/main/java/org/lumijiez/intf/LumiStack.java b/Lab4/src/main/java/org/lumijiez/intf/LumiStack.java new file mode 100644 index 0000000..2066fc3 --- /dev/null +++ b/Lab4/src/main/java/org/lumijiez/intf/LumiStack.java @@ -0,0 +1,11 @@ +package org.lumijiez.intf; + +public interface LumiStack { + + void push(E item); + E pop(); + E peek(); + boolean isEmpty(); + int size(); + void clear(); +} diff --git a/Lab4/src/main/java/org/lumijiez/stacks/ArrayLumiStack.java b/Lab4/src/main/java/org/lumijiez/stacks/ArrayLumiStack.java new file mode 100644 index 0000000..8971046 --- /dev/null +++ b/Lab4/src/main/java/org/lumijiez/stacks/ArrayLumiStack.java @@ -0,0 +1,65 @@ +package org.lumijiez.stacks; + +import org.lumijiez.intf.LumiStack; + +import java.util.EmptyStackException; + +public class ArrayLumiStack implements LumiStack { + private final int MAX_CAPACITY_DEFAULT = 10; + private Object[] array; + private int size; + + public ArrayLumiStack() { + array = new Object[MAX_CAPACITY_DEFAULT]; + size = 0; + } + + public ArrayLumiStack(int capacity) { + array = new Object[capacity]; + size = 0; + } + + @Override + public void push(E item) { + if (size == array.length) { + throw new StackOverflowError("Stack is full"); + } + array[size++] = item; + } + + @Override + public E pop() { + if (isEmpty()) { + throw new EmptyStackException(); + } + E item = (E) array[--size]; + array[size] = null; + return item; + } + + @Override + public E peek() { + if (isEmpty()) { + throw new EmptyStackException(); + } + return (E) array[size - 1]; + } + + @Override + public boolean isEmpty() { + return size == 0; + } + + @Override + public int size() { + return size; + } + + @Override + public void clear() { + for (int i = 0; i < size; i++) { + array[i] = null; + } + size = 0; + } +} diff --git a/Lab4/src/main/java/org/lumijiez/stacks/DynamicArrayLumiStack.java b/Lab4/src/main/java/org/lumijiez/stacks/DynamicArrayLumiStack.java new file mode 100644 index 0000000..5a6f1e5 --- /dev/null +++ b/Lab4/src/main/java/org/lumijiez/stacks/DynamicArrayLumiStack.java @@ -0,0 +1,65 @@ +package org.lumijiez.stacks; + +import org.lumijiez.intf.LumiStack; + +import java.util.EmptyStackException; + +public class DynamicArrayLumiStack implements LumiStack { + private Object[] array; + private int size; + private static final int DEFAULT_CAPACITY = 10; + + public DynamicArrayLumiStack() { + array = new Object[DEFAULT_CAPACITY]; + size = 0; + } + + @Override + public void push(E item) { + ensureCapacity(size + 1); + array[size++] = item; + } + + @Override + public E pop() { + if (isEmpty()) { + throw new EmptyStackException(); + } + E item = (E) array[--size]; + array[size] = null; + return item; + } + + @Override + public E peek() { + if (isEmpty()) { + throw new EmptyStackException(); + } + return (E) array[size - 1]; + } + + @Override + public boolean isEmpty() { + return size == 0; + } + + @Override + public int size() { + return size; + } + + @Override + public void clear() { + for (int i = 0; i < size; i++) { + array[i] = null; + } + size = 0; + } + + private void ensureCapacity(int minCapacity) { + if (minCapacity > array.length) { + int newCapacity = Math.max(array.length * 2, minCapacity); + array = java.util.Arrays.copyOf(array, newCapacity); + } + } +} diff --git a/Lab4/src/main/java/org/lumijiez/stacks/LinkedListLumiStack.java b/Lab4/src/main/java/org/lumijiez/stacks/LinkedListLumiStack.java new file mode 100644 index 0000000..b571bc5 --- /dev/null +++ b/Lab4/src/main/java/org/lumijiez/stacks/LinkedListLumiStack.java @@ -0,0 +1,46 @@ +package org.lumijiez.stacks; + +import org.lumijiez.intf.LumiStack; + +import java.util.EmptyStackException; +import java.util.LinkedList; + +public class LinkedListLumiStack implements LumiStack { + private LinkedList list = new LinkedList<>(); + + @Override + public void push(E item) { + list.addFirst(item); + } + + @Override + public E pop() { + if (isEmpty()) { + throw new EmptyStackException(); + } + return list.removeFirst(); + } + + @Override + public E peek() { + if (isEmpty()) { + throw new EmptyStackException(); + } + return list.getFirst(); + } + + @Override + public boolean isEmpty() { + return list.isEmpty(); + } + + @Override + public int size() { + return list.size(); + } + + @Override + public void clear() { + list.clear(); + } +}