Алгоритмы и структуры данных для начинающих: стеки и очереди
Хранение элементов в массиве
Download 81.5 Kb.
|
Алгоритмы и структуры данных для начинающих
- Bu sahifa navigatsiya:
- Класс Deque (с использованием массива)
Хранение элементов в массиве
Как уже было упомянуто, у реализации очереди с использованием массива есть свои преимущества. Она выглядит простой, но на самом деле есть ряд нюансов, которые надо учесть. Давайте посмотрим на проблемы, которые могут возникнуть, и на их решение. Кроме того, нам понадобится информация об увеличении внутреннего массива из прошлой статьи о динамических массивах. При создании очереди у нее внутри создается массив нулевой длины. Красные буквы «h» и «t» означают указатели _head и _tail соответственно. Deque deq = new Deque(); deq.EnqueueFirst(1); Добавляем элемент в начало deq.EnqueueLast(2); Добавляем элемент в конец deq.EnqueueFirst(0); Добавляем еще один элемент в начало Обратите внимание: индекс «головы» очереди перескочил в начало списка. Теперь первый элемент, который будет возвращен при вызове метода DequeueFirst — 0 (индекс 3). deq.EnqueueLast(3); И еще один в конец Массив заполнен, поэтому при добавлении элемента произойдет следующее: Алгорим роста определит размер нового массива. Элементы скопируются в новый массив с «головы» до «хвоста». Добавится новый элемент. deq.EnqueueLast(4); Добавляем значение в конец расширенного массива Теперь посмотрим, что происходит при удалении элемента: deq.DequeueFirst(); Удаляем элемент из начала deq.DequeueLast(); Удаляем элемент с конца Ключевой момент: вне зависимости от вместимости или заполненности внутреннего массива, логически, содержимое очереди — элементы от «головы» до «хвоста» с учетом «закольцованности». Такое поведение также называется «кольцевым буфером». Теперь давайте посмотрим на реализацию. Класс Deque (с использованием массива) Интерфейс очереди на основе массива такой же, как и в случае реализации через связный список. Мы не будем его повторять. Однако, поскольку список был заменен на массив, у нас добавились новые поля — сам массив, его размер и указатели на «хвост» и «голову» очереди. public class Deque { T[] _items = new T[0]; // Количество элементов в очереди. int _size = 0; // Индекс первого (самого старого) элемента. int _head = 0; // Индекс последнего (самого нового) элемента. int _tail = -1; ... } Download 81.5 Kb. Do'stlaringiz bilan baham: |
Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling
ma'muriyatiga murojaat qiling