что такое структура очереди
Типы очередей в структуре данных
Простая очередь
Как видно из самого названия, простая очередь позволяет нам просто выполнять операции. то есть вставка и удаление выполняются аналогичным образом. Вставка происходит в конце (конце) очереди, а удаления выполняются в начале (начале) списка очереди.
Все узлы соединены друг с другом последовательно. Указатель первого узла указывает на значение второго и так далее.
Первый узел не имеет указателя, указывающего на него, тогда как последний узел не имеет указателя, указывающего на него.
Круговая Очередь
В отличие от простых очередей, в циклической очереди каждый узел последовательно соединяется со следующим узлом, но указатель последнего узла также связан с адресом первого узла. Следовательно, последний узел и первый узел также соединяются, образуя общую кольцевую связь.
Очередь приоритетов
Очередь приоритетов делает возможным получение данных только через предварительно определенный номер приоритета, назначенный элементам данных.
Хотя удаление выполняется в соответствии с номером приоритета (элемент данных с наивысшим приоритетом удаляется первым), вставка выполняется только по порядку.
Двусторонняя очередь (Dequeue)
Двусторонняя очередь позволяют операции вставки и удаления с обоих концов (передний и задний) очереди.
Очереди являются важной концепцией структур данных, и для их правильной работы очень важно понять их типы.
Динамическая структура данных очередь
Содержание:
Одной из моих генеральный компетенций является исследование различных популярных динамических структур данных. Уже на протяжении 10 лет я помогаю всем желающим разобраться с такой структурой данных, как очередь. Программирую структуру данных очередь на одном из следующих языков программирования: Pascal, Delphi, C, C++, C#, Basic, VBA.
Очень часто ко мне обращаются студенты из технических вузов РФ и повествуют о том, что у них в некоторых лабораторных требуется провести реализацию структуры данных очередь. Вы должны понимать, что подобная реализация не может стоить очень дешево! После ознакомления с постановкой задачи, я начинаю задавать клиенту уточняющие вопросы. Затем называю конечную стоимость вашего проекта. Мои цены адекватные, поэтому клиент в 99% незамедлительно соглашается.
А сейчас я предлагаю вашему вниманию видеопрезентацию, в которой тезисно и доступно поясняю все тонкие моменты нашего взаимовыгодного сотрудничества. Особое внимание обратите на отзывы клиентов под этим видео, заказавших у меня работу по программированию.
Что такое структура данных очередь
Добавление элемента в конец очереди.
Удаление элемента из начала очереди.
Фактически, никакие другие операции, кроме трех перечисленных выше, над структурой данных очередь не разрешены: ни сортировка, ни слияние двух однородных очередей, ни расщепление данной очереди на две подочереди. Но на деле, происходит нарушение данного правила, и, очень часто, в школах или вузах дают задания, связанные с обработкой очереди, включающей недопустимые операции. Поэтому, уже нет четкой детерминации на допустимые и недопустимые операции возможные над очередью.
Указатель на начало очереди
В программе на языке Pascal декларация указателя на первый элемент очереди выглядит примерно так:
Вы должны очень хорошо понимать, что собою представляет тип данных Tptr.
Организация взаимосвязей в связанных динамических данных
Любые динамические данные характеризуются высокой гибкостью создания различных структур данных всевозможных конфигураций. Это достигается благодаря возможности выделять и освобождать память под элементы в любой момент времени работы программы и возможности установить связь между любым набором элементов с помощью специальных указателей.
Для правильной организации связей между элементами динамической структуры данных требуется, чтобы каждый элемент содержал, кроме информационных значений, как минимум один указатель. Зачастую, в качестве информационных полей используют записи (Record), которые могут консолидировать в единое целое разнородные значения.
Рассмотрим объявление динамической структуры данных на языке программирования Pascal 7.0.:
ВАЖНО!
Правило последовательности описаний в Pascal требует, чтобы каждый идентификатор был описан, прежде чем он будет использоваться для других объявлений. Если посмотреть на декларацию, представленную выше, то очевидно, что идентификатор Tptr имеет указательный тип данных Telem, но ведь Telem еще не объявлен. Однако ошибки не возникает, так как для описания типов элементов динамических структур данных сделано исключение.
Вспомогательные инструменты для проведения операций над очередью
Абсолютно во всех операциях, производимых над структурой данных очередь, требуется вспомогательный указатель, помимо указателя begQ, ссылающего на первый элемент очереди. Во всех программах и фрагментах программного кода, представленных ниже, будем обозначать вспомогательный указатель идентификатором p. Почему «p»? Потому что с английского слово pointer переводится на русский как указатель.
Что же такое «NIL»
| |
Разберем добавление элемента в непустую очередь
Как видно из представленной схемы, очередь содержит три элемента и находится в согласованном состоянии, так как указатель begQ ссылается на первый элемент.
Чтобы произвести добавление элемента в непустую очередь, необходимо позиционироваться в конец очереди, а если быть более точным, то необходим дополнительный указатель, который позиционируется на последний элемент очереди.
Устанавливаем вспомогательный указатель p на первый элемент очереди.
Циклически передвигаем указатель p на последний элемент очереди.
Например, в языке программирования Pascal для передвижения указателя p можно использовать цикл с предусловием или цикл While-Do.
Как видно из представленной схемы, операция добавления элемента в конец очереди выполняется элементарно. Необходимо указатель последнего элемента переставить на добавляемый элемент. В итоге очередь находится в согласованном состоянии, так как последний элемент ссылается в NIL, а begQ указывает на первый элемент.
Вывод: операция добавления элемента в очередь успешно проведена.
Общий программный вывод: добавление элемента в очередь любого типа: пустую или непустую является универсальной операцией, так как во всех случаях приходится реализовывать идентичные события, а, следовательно, операцию добавления элемента в конец структуры данных очередь можно запрограммировать.
Удаление элемента из очереди
Удаление физически возможно только тогда, когда в очереди присутствуют элементы, минимум один элемент, иначе, когда очередь является пустой, то есть не содержит элементы, данная операция невозможна. Все последующие выкладки будут проистекать из положения, что мы взаимодействуем с непустой очередью.
Разберем удаление элемента из непустой очереди
Как видно из представленной схемы, очередь содержит три элемента и находится в согласованном состоянии, так как указатель begQ ссылается на первый элемент.
Напомню, что удаление элемента осуществляется из начала очереди, то есть уничтожается первый элемент очереди. Технология операции удаления первого элемента из очереди не зависит от количества элементов во всей очереди.
Первым действием необходимо воспользоваться вспомогательным указателем p и установить данный указатель на первый элемент очереди.
Для перехода на следующий элемент очереди используются линковочные поля, которые обеспечивают связь между динамическими узлами структуры данных очередь.
Полностью «отвязываем» удаляемый элемент из очереди, чтобы не осталось ни одной связи с другими элементами. Для этого линковочное поле первого элемента устанавливаем в NIL.
Многие программисты пренебрегают данной операцией и считают ее лишней, но я все-таки рекомендую перед удалением элемента из очереди полностью его «освободить» от каких-либо реляций.
Конечное состояние очереди после удаления первого элемента.
Вывод: операция удаления элемента из очереди успешно проведена.
Общий программный вывод: удаление элемента из непустой очереди является универсальной операцией, так как во всех случаях приходится реализовывать идентичные события, а, следовательно, операцию удаления элемента из очереди можно запрограммировать.
Схема печати всех элементов очереди
Печать элементов структуры данных очередь будет физически возможной, если в очереди имеется хотя бы один элемент. | |
|
Печать элементов очереди от замыкающего к начальному элементу, используя рекурсивный вызов
Печать элементов очереди будет физически возможной, если в очереди имеется хотя бы один элемент. Если очередь пуста (нулевая очередь), то операцию визуализации элементов невозможно произвести. | |