Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпоры информатика 2 сем.doc
Скачиваний:
18
Добавлен:
24.09.2019
Размер:
430.08 Кб
Скачать

Двунаправленные (двусвязные) списки

Двунаправленный (двусвязный) список – это структура данных, состоящая из последовательности элементов, каждый из которых содержит информационную часть и два указателя на соседние элементы. При этом два соседних элемента должны содержать взаимные ссылки друг на друга.

В таком списке каждый элемент (кроме первого и последнего) связан с предыдущим и следующим за ним элементами.

Каждый элемент двунаправленного списка имеет два поля с указателями: одно поле содержит ссылку на следующий элемент, другое поле – ссылку на предыдущий элемент и третье поле – информационное.

Наличие ссылок на следующее звено и на предыдущее позволяет двигаться по списку от каждого звена в любом направлении: от звена к концу списка или от звена к началу списка, поэтому такой список называют двунаправленным.

Основные операции, выполняемые над двунаправленным списком, те же, что и для однонаправленного списка.

При включении элемента в список, нужно использовать указатель как на элемент, за которым происходит включение, так и указатель на элемент, перед которым происходит включение.

При исключении элемента из списка нужно использовать как указатель на сам исключаемый элемент, так и указатели на предшествующий или следующий за исключаемым элементы.

Так как элемент двунаправленного списка имеет два указателя, то при выполнении операций включения/исключения элемента надо изменять больше связей, чем в однонаправленном списке.

Основные операции, осуществляемыми с двунаправленными списками:

создание списка;

печать (просмотр) списка;

вставка элемента в список;

удаление элемента из списка;

поиск элемента в списке;

проверка пустоты списка;

удаление списка.

При работе с двунаправленным списком нет необходимости обеспечивать позиционирование какого-либо указателя именно на первый элемент списка, так как благодаря двум указателям в элементах можно получить доступ к любому элементу списка из любого другого элемента, осуществляя переходы в прямом или обратном направлении.

Однако, указатель принято ставить на заголовок списка.

Для того, чтобы создать список, нужно создать сначала первый элемент списка, а затем при помощи функции добавить к нему остальные элементы.

Добавление может выполняться как в начало, так и в конец списка.

Операция печати списка для двунаправленного списка реализуется абсолютно аналогично соответствующей функции для однонаправленного списка.

Просматривать двунаправленный список можно в обоих направлениях.

В динамические структуры легко добавлять элементы, так как для этого достаточно изменить значения адресных полей.

Операция вставки реализовывается аналогично функции вставки для однонаправленного списка, только с учетом особенностей двунаправленного списка. Из динамических структур можно удалять элементы, так как для этого достаточно изменить значения адресных полей.

Операция удаления элемента из двунаправленного списка осуществляется во многом аналогично удалению из однонаправленного списка.

Операция поиска элемента в двунаправленном списке реализуется абсолютно аналогично соответствующей функции для однонаправленного списка. Поиск элемента в двунаправленном списке можно вести:

а) просматривая элементы от начала к концу списка;

б) просматривая элементы от конца списка к началу;

в) просматривая список в обоих направлениях одновременно: от начала к середине списка и от конца к середине (учитывая, что элементов в списке может быть четное или нечетное количество).

Стеки Стек и очередь – это частные случаи линейного списка.

Стек (англ. stack – стопка) – это структура данных, в которой новый элемент всегда записывается в ее начало (вершину) и очередной читаемый элемент также всегда выбирается из ее начала.

В стеках используется метод доступа к элементам LIFO ( Last Input – First Output, "последним пришел – первым вышел").

Чаще всего принцип работы стека сравнивают со стопкой тарелок: чтобы взять вторую сверху, нужно сначала взять верхнюю. Стек – это список, у которого доступен один элемент (одна позиция).

Этот элемент называется вершиной стека.

Взять элемент можно только из вершины стека, добавить элемент можно только в вершину стека.

Например, если записаны в стек числа 1, 2, 3, то при последующем извлечении получим 3, 2, 1. Стек как динамическую структуру данных легко организовать на основе линейного списка.

Поскольку работа всегда идет с заголовком стека, то есть не требуется осуществлять просмотр элементов, удаление и вставку элементов в середину или конец списка, то достаточно использовать экономичный по памяти линейный однонаправленный список.

Для такого списка достаточно хранить указатель вершины стека, который указывает на первый элемент списка.

Если стек пуст, то списка не существует, и указатель принимает значение NULL.

Основные операции, производимые со стеком:

создание стека;

печать (просмотр) стека;

добавление элемента в вершину стека;

извлечение элемента из вершины стека;

проверка пустоты стека;

очистка стека.

Очереди Очередь – это структура данных, представляющая собой последовательность элементов, образованная в порядке их поступления.

Каждый новый элемент размещается в конце очереди; элемент, стоящий в начале очереди, выбирается из нее первым.

В очереди используется принцип доступа к элементам FIFO ( First Input – First Output, "первый пришёл – первый вышел").

В очереди доступны два элемента (две позиции): начало очереди и конец очереди. Поместить элемент можно только в конец очереди, а взять элемент только из ее начала.

Примером может служить обыкновенная очередь в магазине.

Очередь как динамическую структуру данных легко организовать на основе линейного списка.

Поскольку работа идет с обоими концами очереди, то предпочтительно будет использовать линейный двунаправленный список.

Хотя для работы с таким списком достаточно иметь один указатель на любой элемент списка, здесь целесообразно хранить два указателя – один на начало списка (откуда извлекаем элементы) и один на конец списка (куда добавляем элементы).

Если очередь пуста, то списка не существует, и указатели принимают значение NULL.

Основные операции, производимые с очередью:

создание очереди;

печать (просмотр) очереди;

добавление элемента в конец очереди;

извлечение элемента из начала очереди;

проверка пустоты очереди;

очистка очереди.

Стек и очередь – это частные случаи линейного списка.

Стек является списком, у которого доступен один элемент, называемый вершиной стека. Поместить или извлечь элемент можно только из вершины списка.

Стек и очередь как динамические структуры данных можно организовать на основе линейного списка.

Основными операциями со стеком являются: создание стека; печать (просмотр) стека; добавление элемента в вершину стека; извлечение элемента из вершины стека; проверка пустоты стека; удаление стека.

Очередь является списком, у которого доступны два элемента: начало и конец очереди. Поместить элемент можно только в конец очереди, а взять элемент только из ее начала.

Основными операциями с очередью являются: создание очереди; печать (просмотр) очереди; добавление элемента в конец очереди; извлечение элемента из начала очереди; проверка пустоты очереди; удаление очереди.

Стек и очередь более экономно расходуют адресное пространство по сравнению с однонаправленными и двунаправленными списками.

Назначение и состав системы обработки информации Под системой обработки информации (СОИ) обычно понимают совокупность технических и программных средств, предназначенных для решения задач (вычислительных, информационных, функциональных), связанных с обработкой информации на ЭВМ.

Такие задачи включают:

разработку и отладку программ,

управление информацией (хранение, введение и использование имен и обозначений, поиск, организация связей и т.п.),

эксплуатацию программ (запуск программ и контроль за их выполнением).

Понятие виртуальной машины Говорят, что совокупность предоставляемых СОИ услуг определяет для пользователя виртуальную (абстрактную) машину (в отличие от реально существующей физической ЭВМ), а описание этих услуг и правила пользования ими образуют интерфейс СОИ.

Этот интерфейс определяет язык виртуальной машины - язык общения пользователей с системой. Различные классы решаемых задач, опыт и предпочтения пользователей требуют от СОИ предоставления возможности общения с различными виртуальными машинами;

в этом смысле можно говорить о Basic-машине, Ci#-машине, Java-машине и т.п.

В результате реальная машина, способная выполнять только небольшой набор элементарных действий, определяемых ее системой команд, превращается в виртуальную машину, выполняющую широкий набор гораздо более мощных функций.

Состав системы обработки информации Прикладное программное обеспечение Системное программное обеспечение Физическая машина

Взаимодействие такой системы с внешним миром осуществляется с помощью внешних (периферийных) устройств, обеспечивающих связь СОИ с пользователями.

Концептуально СОИ удобно рассматривать с точки зрения двух групп выполняемых ею функций:

функции, общие для широкого круга применений, реализуемые системными программами,

функции, необходимые для решения конкретных задач, и реализуемые конкретными прикладными программами (приложениями).

Здесь каждый слой, с одной стороны, использует ресурсы, предоставляемые слоем, расположенным непосредственно под ним, а с другой – формирует интерфейс для предоставления собственных ресурсов слою, находящемуся над ним.

Замечание. Границы между слоями подвижны: так, прикладная программа, если она представляет интерес и ценность для широкого круга пользователей и потому часто используется, может быть включена в состав системных программ.

В свою очередь, с целью экономии (например, ускорения работы системной составляющей СОИ) функции, выполняемые системной программой, могут быть реализованы микропрограммой, то есть, переданы на аппаратный уровень.

Назначение и функции системных программ Функции контроля и распределения ресурсов:

управление физическими ресурсами (выделение оперативной и внешней памяти, устройств ввода-вывода),

управление информационными ресурсами (например, файлами),

защита от несанкционированного доступа,

дополнительные услуги (сбор статистической информации, измерение производительности и т.п.)

Компоненты системного программного обеспечения Средства и услуги (редакторы, компиляторы, служебные утилиты) Программы управления