
- •Программирование
- •1. Архитектура машинной памяти
- •2. Внешние запоминающие устройства.
- •3. Адресация памяти.
- •4. Три уровня представления данных в автоматизированных информационных системах.
- •5. Внутренняя структура записи
- •6. Типы структур данных
- •9. Способы хранения, основанные на преобразовании кода записи в ее адрес
- •10. Массивы
- •11. Стеки
- •12. Очередь
- •13. Таблица
- •14. Основные понятия и принципы сортировки
- •15. Основные методы сортировки линейных структур данных
- •16. Внешняя сортировка
- •17. Основные принципы информационного поиска
- •18. Последовательный поиск
- •20. Двоичный поиск
- •21. Блочный поиск
12. Очередь
Очередь — это линейная структура переменного размера. Исключение элементов из очереди допускается с одного конца — с начала очереди. Включение элементов возможно лишь в противоположный конец — в конец очереди. Данные в такой структуре обрабатываются в порядке их поступления по принципу: "первым пришел, первым ушел". В литературе структуру очереди называют структурой типа FIFO (от англ. First In, First Out). Доступ к элементам очереди осуществляется по указателям начала и конца. Указатель начала указывает на элемент очереди, который первым будет исключаться или читаться. Указатель конца устанавливается на свободную ячейку памяти, следующую за последней записью в очереди. Именно в эту ячейку разместится вновь пришедшая запись, т.е. новый элемент очереди.
Для реализации структуры очереди в памяти ЭВМ используется как последовательное, так и связанное представление данных. При последовательном представлении под очередь, так же как и под стек, резервируется блок памяти, внутри которого очередь может расти и сокращаться. С включением каждого нового элемента указатель конца изменяется на единицу. Когда в результате включения новых элементов указатель конца очереди достигает конца зарезервированного блока памяти, он перебрасывается на начало блока. Если указатель конца догоняет указатель начала, то это означает, что блок памяти переполнен.
При исключении элемента указатель начала изменяется на единицу. Если указатель начала совпадает с указателем конца, то очередь пуста.
Схема размещения очереди внутри зарезервированного блока памяти при последовательном представлении данных изображена на рис. 8.5. Здесь же показано, как изменяются указатели при включении и исключении элементов очереди.
П
ри
связанном представлении очереди
предварительного резервирования
памяти не требуется. Записи, образующие
очередь, размещаются в любых свободных
ячейках памяти и связываются между
собой указателями (рис. 8.6). Такая
очередь может расти неограниченно. При
включении и исключении элементов
изменяются лишь значения указателей
начала и конца очереди и значения
указателей связи (АС).
Структура очереди используется при решении различных задач обработки данных. Так, например, моделирование вычислительной системы с разделением времени является одной из традиционных задач, в которых используется структура очереди. В такой системе множество пользователей одновременно работает с единственным центральным процессором, используя одну основную память. Программы пользователей, ожидающие своего выполнения, образуют очередь.
13. Таблица
Таблица — это линейная структура данных, каждый элемент которой характеризуется определенным значением ключа и доступ к элементам которой осуществляется по ключу.
Во всех ранее рассмотренных структурах данных доступ к элементам структуры ограничен, так как читаться может лишь тот элемент, к которому структура хранения обеспечивает доступ посредством индекса или указателя, причем в процессе доступа никак не анализируются значения полей записи.
В большинстве задач автоматизированной обработки информации обращение должно осуществляться к записям об объектах, обладающих вполне определенными признаками. В этом случае в процессе доступа необходим анализ значения какого-либо поля записи (обычно ключевого) , на основании чего решается вопрос о необходимости чтения данной записи и подачи ее на обработку. Такой доступ, называемый доступом по ключу, реализуется в табличных структурах данных.
При последовательном представлении таблица хранится в виде последовательного списка. Записи таблицы располагаются одна задругой в заранее зарезервированном блоке памяти. Такие таблицы легко составлять и дополнять, новые записи просто добавлять в конец таблицы за минимальное время. Однако поиск в таких таблицах длителен, так как последовательно просматриваются все записи таблицы начиная с первой и анализируются значения их ключевых полей, Просмотр осуществляется до тех пор, пока не будет найдена нужная запись или после просмотра всей таблицы не будет выработан сигнал отсутствия нужной записи.
Для включения в последовательный упорядоченный список новой табличной записи необходимо определить место, которое должна занять в списке новая запись в соответствии со значением своего ключа. Соответствующая ячейка памяти должна быть освобождена, для чего все записи передвигаются на одну ячейку, т.е. часть массива перезаписывается.
Пусть, например, таблица записей хранится в виде упорядоченного последовательного списка, изображенного на рис. 8.8,а. Упорядочивание записей произведено по алфавиту ключевых слов. Для включения в список записи D ее в соответствии со значением ключа необходимо на физическом уровне разместить вслед за записью С в ячейке 104. Для этого все последующие записи следует передвинуть на одну ячейку в сторону больших адресов (рис. 8.8,б). Таким образом, информационный массив необходимо перезаписывать всякий раз с приходом новой записи.
Упорядоченная таблица может храниться в виде связанного списка. Ведение динамически изменяющейся таблицы при этом не требует выполнения процедур перезаписи. Однако поиск в такой таблице возможен лишь последовательным просмотром записей в порядке, определяемом указателями.
Для хранения таблиц часто используется смешанный способ представления данных. При этом на. начальном этапе создания информационного массива записи каждой таблицы размещаются последовательно в зарезервированных блоках памяти, По мере роста таблиц блоки заполняются. Когда какой-либо блок окажется заполненным полностью, для этой таблицы выделяется новый блок памяти, который связывается указателем с ранее заполненным блоком. На рис. 8.9 показано размещение в памяти двух динамически изменяющихся таблиц А и В, хранящихся в связанных блоках памяти. По мере того как блок памяти таблицы А оказался заполненным, в свободном участке памяти для таблицы А выделяется новый блок, связанный с первым указателем, По мере роста таблицы В под нее также выделяется новый блок памяти. Такая структура хранения удобна для размещения в памяти табличных структур с неизвестным заранее числом элементов.
Для хранения таблиц часто используется способ размещения в памяти, обеспечивающий прямой доступ к каждой записи таблицы.
Если все N записей таблицы имеют разные значения ключей Ki и найдена функция f(Ki), такая, что для любого 0 < i < N f(Ki) принимает целое значение от 0 дот, то значение f(Ki) можно рассматривать как адрес ячейки памяти, в которой размещена запись с ключам Ki. Функция f(Ki) называется функцией преобразования или, иначе, функцией расстановки. Доступ к любой записи осуществляется путем непосредственного вычисления по значению ключа адреса хранения этой записи. Время поиска в таких таблицах минимально и определяется в основном временем вычисления f(Ki).