diff --git a/students/23K0120/23K0120-p23/pom.xml b/students/23K0120/23K0120-p23/pom.xml
new file mode 100644
index 000000000..b5671cb1c
--- /dev/null
+++ b/students/23K0120/23K0120-p23/pom.xml
@@ -0,0 +1,13 @@
+
+
+ 4.0.0
+
+ 23K0120
+ ru.mirea.practice
+ 2024.1
+ ../pom.xml
+
+ 23K0120-p23
+ Очередь
+
diff --git a/students/23K0120/23K0120-p23/src/main/java/ru/mirea/practice/s23k0120/Main.java b/students/23K0120/23K0120-p23/src/main/java/ru/mirea/practice/s23k0120/Main.java
new file mode 100644
index 000000000..b81d5a3b0
--- /dev/null
+++ b/students/23K0120/23K0120-p23/src/main/java/ru/mirea/practice/s23k0120/Main.java
@@ -0,0 +1,12 @@
+package ru.mirea.practice.s23k0120;
+
+public final class Main {
+
+ private Main() {
+
+ }
+
+ public static void main(String[] args) {
+ System.out.println("Двадцать третья практическая работа!");
+ }
+}
diff --git a/students/23K0120/23K0120-p23/src/main/java/ru/mirea/practice/s23k0120/task1/ArrayQueue.java b/students/23K0120/23K0120-p23/src/main/java/ru/mirea/practice/s23k0120/task1/ArrayQueue.java
new file mode 100644
index 000000000..5216a220a
--- /dev/null
+++ b/students/23K0120/23K0120-p23/src/main/java/ru/mirea/practice/s23k0120/task1/ArrayQueue.java
@@ -0,0 +1,107 @@
+package ru.mirea.practice.s23k0120.task1;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+public class ArrayQueue implements ArrayQueueAdt {
+ private final int size;
+ private final List array;
+ private int indexFront;
+ private int indexRear;
+
+ ArrayQueue(Collection collection) {
+ array = new ArrayList<>(collection);
+ this.size = collection.size();
+ indexFront = 0;
+ indexRear = this.size - 1;
+ }
+
+ ArrayQueue(int size) {
+ array = new ArrayList<>();
+ for (int i = 0; i < size; i++) {
+ array.add(i, null);
+ }
+ indexFront = 0;
+ indexRear = -1;
+ this.size = size;
+ }
+
+ @Override
+ public void enqueue(T element) {
+ indexRear += 1;
+ if (indexRear == size) {
+ indexRear = 0;
+ }
+ array.set(indexRear, element);
+ }
+
+ @Override
+ public T dequeue() {
+ T element;
+ if (isEmpty()) {
+ element = null;
+ } else {
+ element = array.get(indexFront);
+ if (indexRear == indexFront) {
+ indexRear -= 1;
+ }
+ if (indexRear == -1) {
+ indexRear = size - 1;
+ }
+ indexFront += 1;
+ if (indexFront == size) {
+ indexFront = 0;
+ }
+ }
+ return element;
+ }
+
+ @Override
+ public int size() {
+ return size;
+ }
+
+ @Override
+ public boolean isEmpty() {
+ return indexRear == -1;
+ }
+
+ @Override
+ public void clear() {
+ array.clear();
+ }
+
+ @Override
+ public T front() {
+ return array.get(0);
+ }
+
+ @Override
+ public T rear() {
+ return array.get(indexRear);
+ }
+
+ @Override
+ public String toString() {
+ ArrayList tempList = new ArrayList<>(size);
+ if (indexRear == -1) {
+ return "[]";
+ } else if (indexFront < indexRear) {
+ for (int i = indexFront; i < indexRear + 1; i++) {
+ tempList.add(array.get(i));
+ }
+ } else {
+ for (int i = indexFront; i < size; i++) {
+ tempList.add(array.get(i));
+ }
+ for (int i = 0; i < indexRear + 1; i++) {
+ if (i == indexFront) {
+ break;
+ }
+ tempList.add(array.get(i));
+ }
+ }
+ return tempList.toString();
+ }
+}
diff --git a/students/23K0120/23K0120-p23/src/main/java/ru/mirea/practice/s23k0120/task1/ArrayQueueAdt.java b/students/23K0120/23K0120-p23/src/main/java/ru/mirea/practice/s23k0120/task1/ArrayQueueAdt.java
new file mode 100644
index 000000000..9bfc1fd0d
--- /dev/null
+++ b/students/23K0120/23K0120-p23/src/main/java/ru/mirea/practice/s23k0120/task1/ArrayQueueAdt.java
@@ -0,0 +1,17 @@
+package ru.mirea.practice.s23k0120.task1;
+
+public interface ArrayQueueAdt {
+ void enqueue(T element);
+
+ T dequeue();
+
+ int size();
+
+ boolean isEmpty();
+
+ void clear();
+
+ T front();
+
+ T rear();
+}
diff --git a/students/23K0120/23K0120-p23/src/main/java/ru/mirea/practice/s23k0120/task1/ArrayQueueTest.java b/students/23K0120/23K0120-p23/src/main/java/ru/mirea/practice/s23k0120/task1/ArrayQueueTest.java
new file mode 100644
index 000000000..3a5b36821
--- /dev/null
+++ b/students/23K0120/23K0120-p23/src/main/java/ru/mirea/practice/s23k0120/task1/ArrayQueueTest.java
@@ -0,0 +1,27 @@
+package ru.mirea.practice.s23k0120.task1;
+
+public abstract class ArrayQueueTest {
+ public static void main(String[] args) {
+ ArrayQueue queue = new ArrayQueue<>(5);
+ queue.enqueue(1);
+ queue.enqueue(2);
+ queue.enqueue(3);
+ queue.enqueue(4);
+ queue.enqueue(5);
+ System.out.println(queue);
+ queue.enqueue(8);
+ System.out.println(queue);
+ queue.dequeue();
+ queue.dequeue();
+ queue.dequeue();
+ System.out.println(queue);
+ queue.enqueue(3);
+ System.out.println(queue);
+ queue.enqueue(2);
+ System.out.println(queue);
+ queue.enqueue(1);
+ System.out.println(queue);
+ queue.dequeue();
+ System.out.println(queue);
+ }
+}
diff --git a/students/23K0120/23K0120-p23/src/main/java/ru/mirea/practice/s23k0120/task2/AbstractQueue.java b/students/23K0120/23K0120-p23/src/main/java/ru/mirea/practice/s23k0120/task2/AbstractQueue.java
new file mode 100644
index 000000000..be41415f4
--- /dev/null
+++ b/students/23K0120/23K0120-p23/src/main/java/ru/mirea/practice/s23k0120/task2/AbstractQueue.java
@@ -0,0 +1,29 @@
+package ru.mirea.practice.s23k0120.task2;
+
+import java.util.AbstractList;
+
+public abstract class AbstractQueue implements Queue {
+ private int size;
+ private AbstractList list;
+
+ @Override
+ public abstract void enqueue(T element);
+
+ @Override
+ public abstract T dequeue();
+
+ @Override
+ public int size() {
+ return size;
+ }
+
+ @Override
+ public boolean isEmpty() {
+ return list.isEmpty();
+ }
+
+ @Override
+ public void clear() {
+ list.clear();
+ }
+}
diff --git a/students/23K0120/23K0120-p23/src/main/java/ru/mirea/practice/s23k0120/task2/LinkedQueue.java b/students/23K0120/23K0120-p23/src/main/java/ru/mirea/practice/s23k0120/task2/LinkedQueue.java
new file mode 100644
index 000000000..d708087e4
--- /dev/null
+++ b/students/23K0120/23K0120-p23/src/main/java/ru/mirea/practice/s23k0120/task2/LinkedQueue.java
@@ -0,0 +1,49 @@
+package ru.mirea.practice.s23k0120.task2;
+
+import java.util.Collection;
+import java.util.LinkedList;
+import java.util.List;
+
+public class LinkedQueue implements Queue {
+ private final List linkedList;
+ private int size;
+
+ LinkedQueue(Collection collection) {
+ linkedList = new LinkedList<>(collection);
+ this.size = collection.size();
+ }
+
+ LinkedQueue() {
+ linkedList = new LinkedList<>();
+ this.size = 0;
+ }
+
+ @Override
+ public void enqueue(T element) {
+ linkedList.add(size - 1, element);
+ size += 1;
+ }
+
+ @Override
+ public T dequeue() {
+ T element = linkedList.get(0);
+ linkedList.remove(0);
+ size -= 1;
+ return element;
+ }
+
+ @Override
+ public int size() {
+ return size;
+ }
+
+ @Override
+ public boolean isEmpty() {
+ return linkedList.isEmpty();
+ }
+
+ @Override
+ public void clear() {
+ linkedList.clear();
+ }
+}
diff --git a/students/23K0120/23K0120-p23/src/main/java/ru/mirea/practice/s23k0120/task2/Queue.java b/students/23K0120/23K0120-p23/src/main/java/ru/mirea/practice/s23k0120/task2/Queue.java
new file mode 100644
index 000000000..876533c9a
--- /dev/null
+++ b/students/23K0120/23K0120-p23/src/main/java/ru/mirea/practice/s23k0120/task2/Queue.java
@@ -0,0 +1,13 @@
+package ru.mirea.practice.s23k0120.task2;
+
+public interface Queue {
+ void enqueue(T element);
+
+ T dequeue();
+
+ int size();
+
+ boolean isEmpty();
+
+ void clear();
+}
diff --git a/students/23K0120/pom.xml b/students/23K0120/pom.xml
index 71c87f518..a5ae6098e 100644
--- a/students/23K0120/pom.xml
+++ b/students/23K0120/pom.xml
@@ -36,5 +36,6 @@
23K0120-p20
23K0120-p21
23K0120-p22
+ 23K0120-p23