Реализовать дек и очередь через массив - C#
Формулировка задачи:
Всем доброго времени суток, делаю лабораторную работу.
Задача такая:Реализовать dequeue с помощью массива.
Или создать очередь при помощи массива.
У меня всё работает всё хорошо.
Мне не совсем ясна логика работы программы и синтаксис в некоторых местах, прошу объяснить мне что там и как происходит и что оно вообще такое, те места где мне не ясно я прокомментировал(ОБЪЯСНИТЕ).
Вот код:
Вот сам мейн
Код закинул полностью, вдруг кому-то надо будет))
namespace Lab_1 { class Queue<T> { private T[] _array;//массив, где хранятся наши элементы очереди. private int size;//количество елементов в очереди private const int defaultCapacity = 10;// количество элементов под которые выделено памяти в момент создания объекта Очередь. private int capacity;//количество элементов под которые выделено памяти, запомните, что не всегда size==capacity private int head;//переменная которая указывает на передний элемент. private int tail;//переменная которая указывает на задний элемент. public Queue() { capacity = defaultCapacity; _array = new T[defaultCapacity]; size = 0; head = -1; tail = 0; } public bool isEmpty() //проверка на пустоту { return size == 0; } //ОБЪЯСНИТЕ данный метод public void Enqueue(T newElement)//добавляет елемент в конец списка { if (size == capacity) { T[] newQueue = new T[2 * capacity];//ОБЪЯСНИТЕ Array.Copy(_array, 0, newQueue, 0, _array.Length);//ОБЪЯСНИТЕ _array = newQueue; capacity *= 2; } size++; _array[tail++ % capacity] = newElement; } public T Dequeue()//удаляет и возвращает объект из начала Очереди { if (size == 0) { throw new InvalidOperationException(); } size--; return _array[++head % capacity]; } public int Count//свойство для вывода size. { get { return size; } } } }
namespace Lab_1 { class Program { static void Main(string[] args) { Console.WriteLine("Очередь"); Queue<string> q = new Queue<string>(); Console.WriteLine("Очередь состоит из 10 елементов заплните их:"); string NewElement; for (int i = 0; i < 10; i++) { NewElement = Console.ReadLine(); q.Enqueue(NewElement); } Console.WriteLine("Елементов в очереди {0}",q.Count); // string ConclusionElement; for (int i = 0; i < 10; i++) { ConclusionElement = q.Dequeue(); Console.WriteLine("Елемен {0}, номерв очереди {1}",ConclusionElement,i+1); } Console.ReadLine(); } } }
Решение задачи: «Реализовать дек и очередь через массив»
textual
Листинг программы
if (size == capacity) // старый массив стал тесноват. { T[] newQueue = new T[2 * capacity]; // создается новый массив, в два раза больше. Array.Copy(_array, 0, newQueue, 0, _array.Length);// старый массив целиком копируется в новый _array = newQueue; capacity *= 2; // запоминаем, что емкость стала вдвое больше }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д