Реализовать дек и очередь через массив - 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;  // запоминаем, что емкость стала вдвое больше
            }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 3.857 из 5
Похожие ответы