Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Programmirovanie.docx
Скачиваний:
10
Добавлен:
24.04.2019
Размер:
2.07 Mб
Скачать

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).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]