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