diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..9a3fe8c
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+!*.java
diff --git a/stack/.idea/misc.xml b/stack/.idea/misc.xml
new file mode 100644
index 0000000..72cfda0
--- /dev/null
+++ b/stack/.idea/misc.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/stack/.idea/modules.xml b/stack/.idea/modules.xml
new file mode 100644
index 0000000..5fc38ad
--- /dev/null
+++ b/stack/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/stack/.idea/uiDesigner.xml b/stack/.idea/uiDesigner.xml
new file mode 100644
index 0000000..e96534f
--- /dev/null
+++ b/stack/.idea/uiDesigner.xml
@@ -0,0 +1,124 @@
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+
\ No newline at end of file
diff --git a/stack/.idea/vcs.xml b/stack/.idea/vcs.xml
new file mode 100644
index 0000000..6c0b863
--- /dev/null
+++ b/stack/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/stack/.idea/workspace.xml b/stack/.idea/workspace.xml
new file mode 100644
index 0000000..f1c00e7
--- /dev/null
+++ b/stack/.idea/workspace.xml
@@ -0,0 +1,453 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1570325581041
+
+
+ 1570325581041
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ stack
+
+
+
+
+
+
+
+
+
+
+
+
+ 1.8
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/stack/out/production/stack/Deque/Deque.class b/stack/out/production/stack/Deque/Deque.class
new file mode 100644
index 0000000..2bf9842
Binary files /dev/null and b/stack/out/production/stack/Deque/Deque.class differ
diff --git a/stack/out/production/stack/Deque/DequeImpl.class b/stack/out/production/stack/Deque/DequeImpl.class
new file mode 100644
index 0000000..c7702f5
Binary files /dev/null and b/stack/out/production/stack/Deque/DequeImpl.class differ
diff --git a/stack/out/production/stack/META-INF/stack.kotlin_module b/stack/out/production/stack/META-INF/stack.kotlin_module
new file mode 100644
index 0000000..8fb6019
Binary files /dev/null and b/stack/out/production/stack/META-INF/stack.kotlin_module differ
diff --git a/stack/out/production/stack/Main.class b/stack/out/production/stack/Main.class
new file mode 100644
index 0000000..beacef9
Binary files /dev/null and b/stack/out/production/stack/Main.class differ
diff --git a/stack/out/production/stack/PriorityQueue/PriorityQueue.class b/stack/out/production/stack/PriorityQueue/PriorityQueue.class
new file mode 100644
index 0000000..c27d87f
Binary files /dev/null and b/stack/out/production/stack/PriorityQueue/PriorityQueue.class differ
diff --git a/stack/out/production/stack/PriorityQueue/PriorityQueueImpl.class b/stack/out/production/stack/PriorityQueue/PriorityQueueImpl.class
new file mode 100644
index 0000000..effd899
Binary files /dev/null and b/stack/out/production/stack/PriorityQueue/PriorityQueueImpl.class differ
diff --git a/stack/out/production/stack/Queue/Queue.class b/stack/out/production/stack/Queue/Queue.class
new file mode 100644
index 0000000..a53b9bc
Binary files /dev/null and b/stack/out/production/stack/Queue/Queue.class differ
diff --git a/stack/out/production/stack/Queue/QueueImpl.class b/stack/out/production/stack/Queue/QueueImpl.class
new file mode 100644
index 0000000..7049c8d
Binary files /dev/null and b/stack/out/production/stack/Queue/QueueImpl.class differ
diff --git a/stack/out/production/stack/Stack/Stack.class b/stack/out/production/stack/Stack/Stack.class
new file mode 100644
index 0000000..a9bb51c
Binary files /dev/null and b/stack/out/production/stack/Stack/Stack.class differ
diff --git a/stack/out/production/stack/Stack/StackImpl.class b/stack/out/production/stack/Stack/StackImpl.class
new file mode 100644
index 0000000..15f4cde
Binary files /dev/null and b/stack/out/production/stack/Stack/StackImpl.class differ
diff --git a/stack/src/Deque/Deque.java b/stack/src/Deque/Deque.java
new file mode 100644
index 0000000..211772e
--- /dev/null
+++ b/stack/src/Deque/Deque.java
@@ -0,0 +1,18 @@
+package Deque;
+
+public interface Deque {
+
+ public void pushTail(int item);
+
+ public void pushHead(int item);
+
+ public int popTail();
+
+ public int popHead();
+
+ public boolean isEmpty();
+
+ public boolean isFull();
+
+ public void clear();
+}
diff --git a/stack/src/Deque/DequeImpl.java b/stack/src/Deque/DequeImpl.java
new file mode 100644
index 0000000..cc51397
--- /dev/null
+++ b/stack/src/Deque/DequeImpl.java
@@ -0,0 +1,81 @@
+package Deque;
+
+public class DequeImpl implements Deque {
+
+ private int size;
+ private int[] array;
+ private int head = 0;
+ private int tail = -1;
+ private int items = 0;
+
+ public DequeImpl(int _size) {
+ size = _size;
+ array = new int[_size];
+ }
+
+ @Override
+ public void pushTail(int item) {
+ if (tail == size-1) {
+ tail = -1;
+ }
+
+ array[++tail] = item;
+ items++;
+ }
+
+ @Override
+ public void pushHead(int item) {
+ if(head == 0) {
+ head = size;
+ }
+
+ array[--head] = item;
+ items++;
+ }
+
+ @Override
+ public int popTail() {
+ int item = array[tail];
+
+ tail--;
+ if (tail == -1) {
+ tail = size-1;
+ }
+
+ items--;
+
+ return item;
+ }
+
+ @Override
+ public int popHead() {
+ int item = array[head];
+
+ head++;
+ if (head == size) {
+ head = 0;
+ }
+
+ items--;
+
+ return item;
+ }
+
+ @Override
+ public boolean isEmpty() {
+ return (items == 0);
+ }
+
+ @Override
+ public boolean isFull() {
+ return (items == size);
+ }
+
+ @Override
+ public void clear() {
+ tail = -1;
+ head = 0;
+ size = 0;
+ items = 0;
+ }
+}
diff --git a/stack/src/Main.java b/stack/src/Main.java
new file mode 100644
index 0000000..3cf5755
--- /dev/null
+++ b/stack/src/Main.java
@@ -0,0 +1,145 @@
+import Deque.Deque;
+import Deque.DequeImpl;
+import PriorityQueue.PriorityQueueImpl;
+import Queue.QueueImpl;
+import Stack.Stack;
+import Stack.StackImpl;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.util.Random;
+
+public class Main {
+ public static void main(String[] args) throws IOException {
+ // StackImpl class testing
+ System.out.println("------ Stack ------");
+
+ StackImpl stack = new StackImpl(10);
+
+ stack.push(1);
+ stack.push(2);
+ stack.push(3);
+
+ System.out.println(stack.peek());
+
+ System.out.println(stack.pop());
+ System.out.println(stack.pop());
+
+ while(!stack.isEmpty()) {
+ System.out.println(stack.pop());
+ }
+
+ System.out.println();
+
+ // Queue class testing
+ System.out.println("------ Queue ------");
+
+ QueueImpl queue = new QueueImpl(10);
+
+ queue.insert(5);
+ queue.insert(6);
+ System.out.println(queue.remove());
+ System.out.println(queue.remove());
+
+ for (int i = 1; i <= 10; i++) {
+ queue.insert(i);
+ System.out.println("inserted: " + i);
+ }
+
+ System.out.println("peek: " + queue.peek());
+
+ while (!queue.isEmpty()) {
+ System.out.println(queue.remove());
+ }
+
+ System.out.println();
+
+ // PriorityQueue class testing
+ System.out.println("------ PriorityQueue ------");
+ PriorityQueueImpl priorityQueue = new PriorityQueueImpl(10);
+ Random random = new Random();
+
+ for (int i = 1; i <= 10; i++) {
+ int item = random.nextInt(10);
+
+ priorityQueue.insert(item);
+ System.out.println("inserted: " + item);
+ }
+
+ while (!priorityQueue.isEmpty()) {
+ System.out.println(priorityQueue.remove());
+ }
+
+ System.out.println();
+
+ // Reverse string
+ System.out.println("------ Reverse string ------");
+
+ InputStreamReader inputStream = new InputStreamReader(System.in);
+ BufferedReader bufferedReader = new BufferedReader(inputStream);
+
+ String inputString;
+
+ do {
+ inputString = bufferedReader.readLine();
+ System.out.println(reverseString(inputString));
+ }
+ while(!inputString.equals(""));
+
+ System.out.println();
+
+ // Deque class test
+ System.out.println("------ Deque ------");
+
+ DequeImpl deque = new DequeImpl(10);
+
+ while (!deque.isFull()) {
+ int item = random.nextInt(10);
+
+ if(item % 2 == 0) {
+ deque.pushHead(item);
+
+ System.out.println("pushHead: " + item);
+ }
+ else {
+ deque.pushTail(item);
+
+ System.out.println("pushTail: " + item);
+ }
+ }
+
+ System.out.println();
+
+ int selector = 1;
+ int item = 0;
+
+ while (!deque.isEmpty()) {
+ if (selector == 1) {
+ System.out.println("popHead: " + deque.popHead());
+ }
+ else {
+ System.out.println("popTail: " + deque.popTail());
+ }
+
+ selector *= -1;
+ }
+ }
+
+ public static String reverseString(String string) {
+ StackImpl chars = new StackImpl(string.length());
+ String revString = "";
+
+ for (int i = 0; i < string.length(); i++) {
+ char ch = string.charAt(i);
+ chars.push(ch);
+ }
+
+ while (!chars.isEmpty()) {
+ revString += (char) chars.pop();
+ }
+
+ return revString;
+ }
+}
diff --git a/stack/src/PriorityQueue/PriorityQueue.java b/stack/src/PriorityQueue/PriorityQueue.java
new file mode 100644
index 0000000..788f6fd
--- /dev/null
+++ b/stack/src/PriorityQueue/PriorityQueue.java
@@ -0,0 +1,14 @@
+package PriorityQueue;
+
+public interface PriorityQueue {
+
+ public boolean isFull();
+
+ public boolean isEmpty();
+
+ public void insert(int item);
+
+ public int remove();
+
+ public int peek();
+}
diff --git a/stack/src/PriorityQueue/PriorityQueueImpl.java b/stack/src/PriorityQueue/PriorityQueueImpl.java
new file mode 100644
index 0000000..7d3145d
--- /dev/null
+++ b/stack/src/PriorityQueue/PriorityQueueImpl.java
@@ -0,0 +1,50 @@
+package PriorityQueue;
+
+public class PriorityQueueImpl implements PriorityQueue {
+
+ private int[] array;
+ private int size = 0;
+ private int items = 0;
+
+ public PriorityQueueImpl(int _size) {
+ array = new int[_size];
+ size = _size;
+ }
+
+ @Override
+ public boolean isFull() {
+ return (items == size);
+ }
+
+ @Override
+ public boolean isEmpty() {
+ return (items == 0);
+ }
+
+ @Override
+ public void insert(int item) {
+ int i;
+
+ for (i = items; i > 0; i--) {
+ if (item > array[i-1]) {
+ array[i] = array[i-1];
+ }
+ else {
+ break;
+ }
+ }
+
+ array[i] = item;
+ items++;
+ }
+
+ @Override
+ public int remove() {
+ return array[--items];
+ }
+
+ @Override
+ public int peek() {
+ return array[items-1];
+ }
+}
diff --git a/stack/src/Queue/Queue.java b/stack/src/Queue/Queue.java
new file mode 100644
index 0000000..3ec4a9c
--- /dev/null
+++ b/stack/src/Queue/Queue.java
@@ -0,0 +1,17 @@
+package Queue;
+
+public interface Queue {
+
+ public boolean isEmpty();
+
+ public boolean isFull();
+
+ public int size();
+
+ public void insert(int item);
+
+ public int remove();
+
+ public int peek();
+
+}
diff --git a/stack/src/Queue/QueueImpl.java b/stack/src/Queue/QueueImpl.java
new file mode 100644
index 0000000..4aba09c
--- /dev/null
+++ b/stack/src/Queue/QueueImpl.java
@@ -0,0 +1,57 @@
+package Queue;
+
+public class QueueImpl implements Queue {
+ private int size;
+ private int[] array;
+ private int items = 0;
+ private int head = 0;
+ private int tail = -1;
+
+ public QueueImpl(int _size) {
+ array = new int[_size];
+ size = _size;
+ }
+
+ @Override
+ public boolean isEmpty() {
+ return (items == 0);
+ }
+
+ @Override
+ public boolean isFull() {
+ return (items == size - 1);
+ }
+
+ @Override
+ public int size() {
+ return size;
+ }
+
+ @Override
+ public void insert(int item) {
+ if (tail == size-1) {
+ tail = -1;
+ }
+
+ array[++tail] = item;
+ items++;
+ }
+
+ @Override
+ public int remove() {
+ int item = array[head++];
+
+ if (head == size) {
+ head = 0;
+ }
+
+ items--;
+
+ return item;
+ }
+
+ @Override
+ public int peek() {
+ return array[head];
+ }
+}
diff --git a/stack/src/Stack/Stack.java b/stack/src/Stack/Stack.java
new file mode 100644
index 0000000..40ce434
--- /dev/null
+++ b/stack/src/Stack/Stack.java
@@ -0,0 +1,14 @@
+package Stack;
+
+public interface Stack {
+
+ public boolean isEmpty();
+
+ public boolean isFull();
+
+ public void push(int item);
+
+ public int pop();
+
+ public int peek();
+}
diff --git a/stack/src/Stack/StackImpl.java b/stack/src/Stack/StackImpl.java
new file mode 100644
index 0000000..d1e9d01
--- /dev/null
+++ b/stack/src/Stack/StackImpl.java
@@ -0,0 +1,38 @@
+package Stack;
+
+public class StackImpl implements Stack {
+ private int[] array;
+ private int size;
+ private int top;
+
+ public StackImpl(int _size) {
+ array = new int[_size];
+ size = _size;
+ top = -1;
+ }
+
+ @Override
+ public boolean isEmpty() {
+ return (top == -1);
+ }
+
+ @Override
+ public boolean isFull() {
+ return (top == size - 1);
+ }
+
+ @Override
+ public void push(int item) {
+ array[++top] = item;
+ }
+
+ @Override
+ public int pop() {
+ return array[top--];
+ }
+
+ @Override
+ public int peek() {
+ return array[top];
+ }
+}
diff --git a/stack/stack.iml b/stack/stack.iml
new file mode 100644
index 0000000..c90834f
--- /dev/null
+++ b/stack/stack.iml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file