Поскольку это домашнее задание, вот некоторая информация об очередях и о том, как вы могли бы реализовать их.
Очередь - это стандартный абстрактный тип данных.
С ним связано несколько свойств:
- Это линейная структура данных - все компоненты расположены по прямой линии.
- У него есть правило роста / затухания - очереди добавляют и удаляют с противоположных концов.
- Знание того, как они построены, не должно быть неотъемлемой частью их использования, потому что у них есть общедоступные интерфейсы.
Очереди могут быть смоделированы с использованием последовательных массивов или связанных списков.
Если вы используете массив, есть несколько вещей, на которые следует обратить внимание, потому что вы растете в одном направлении, поэтому у вас в конечном итоге будет исчерпан массив. Затем у вас есть выбор (сдвиг в сторону роста). Если вы решите вернуться к началу массива (обернуть вокруг), вы должны убедиться, что голова и хвост не перекрываются. Если вы решите просто увеличить очередь, у вас будет много потерянной памяти.
Если вы используете Linked-List, вы можете вставить куда угодно, и очередь будет расти от хвоста и уменьшаться от головы. Вам также не нужно беспокоиться о том, чтобы заполнить свой список, а также обернуть / переместить элементы или увеличить их.
Однако, если вы решите реализовать очередь, помните, что очереди должны предоставлять некоторый общий интерфейс для использования очереди. Вот несколько примеров:
- enqueue - вставляет элемент в конец (хвост) очереди
- dequeue - удаление элемента из передней части (головы) непустой очереди.
- empty - Возвращает, пуста очередь или нет
- size - возвращает размер очереди
Существуют и другие операции, которые вы, возможно, захотите добавить в свою очередь (в C ++ вам может потребоваться итератор в начале / конце вашей очереди), но то, как вы строите свою очередь, не должно иметь значения в отношении операций, которые она обеспечивает.
Однако, в зависимости от того, как вы хотите использовать свою очередь, существуют более эффективные способы ее создания. Обычный компромисс между временем вставки / удаления и временем поиска. Вот приличная ссылка .