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();
+ }
+}