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