
- •Введение
- •Глава 1. Структурное программирование
- •1.1 Основные определения
- •1.2 Три основных действия
- •1.2.1 Последовательность
- •1.2.2 Выбор
- •1.2.3 Цикл
- •1.3. Структурный подход к решению задач
- •Задание
- •1.4. Организация хранения и обработки данных
- •1.4.1 Записи и списки
- •Задание
- •1.4.2 Очередь
- •Задание
- •1.4.3 Стек
- •Задание
- •1.5 Структурное программирование.
- •2. Программирование на языке паскаль
- •2.1. Краткая история эвм и языки программирования
- •Задание
- •2.2. Интегрированная среда borland pascal
- •2.2.1. Краткая характеристика. Запуск программы
- •2.1.2. Основы работы в редакторе Открытие нового окна
- •Завершение работы со средой
- •Задание
- •«Горячие» клавиши интегрированной среды
- •2.3. Структура программы
- •2.3.1.Основные положения
- •2.3.2. Понятие идентификатора
- •2.3.3. Первая программа
- •2.3.4. Описание подпрограммы (процедуры).
- •2.3.4. Строковый тип данных
- •2.3.5. Процедуры ввода и вывода данных
- •Задание
- •2.4. Программа калькулятор.
- •2.4.1. Тип целые и вещественный.
- •2.4.2. Переменные вещественного типа
- •Задание
- •2.5. Улучшенный калькулятор
- •2.5.1. Операторы выбора
- •Булевские (логические) операции
- •Операции отношения
- •Оператор if … then
- •Оператор case
- •2.5.2. Основные отличия применения операторов выбора. Перечисляемый тип. Интервальный тип.
- •Задание
- •2.6. Улучшенный каЛьКулятор (продолжение)
- •2.6.1. Оператор цикла с постусловием (проверка на ноль)
- •2.6.2. Оператор цикла с предусловием
- •2.6.3. Оператор цикла со счетчиком (параметром)
- •Задание
- •2.7. Переменные типа массив
- •2.7.1. Виды массивов
- •2.7.2.Описание массива
- •2.7.3.Нахождение максимального элемента в массиве
- •Задание
- •2.7.4. Строковая переменная (продолжение)
- •Задание
- •2.7.5. Строковая переменная как массив
- •Мама мыла раму
- •Задание
- •2.7.6. Описание функции
- •Задание
Задание
Приведите пример списков.
Приведите примеры односвязных списков.
Приведите пример двусвязных списков.
Что нужно сделать для того, чтобы добавить запись в двухсвязный список?
Что нужно сделать для того, чтобы удалить запись из двухсвязного списка?
1.4.2 Очередь
В предыдущем параграфе Вы познакомились с понятием список и линейный список. Говоря о свойствах линейного списка, мы отмечали, что обычно для линейного списка разрешается добавлять запись (элемент) между любыми двумя другими и удалять любую запись (элемент). Однако, это не всегда так. Существуют списки, в которых добавление новой записи (элемента), а также его удаление, подчиняется определенным правилам.
Представьте себе, что Вы решили приобрести билет на концерт популярной группы. Вы идете в место продажи билетов, а там уже присутствуют такие же желающие приобрести билеты. Вам ничего не остается, как ждать, пока пришедшие раньше Вас не приобретут билеты, но если кто-то пришел после Вас, он должен дождаться, пока не приобретете билеты Вы. Здесь мы имеем дело с принципом: «Первый пришел, первым ушел!» или на английском языке: «First input, First output». Обычно его называют принципом FIFO.
Очередь – частный случай линейного списка, для которого добавление элемента разрешено только в конец списка (хвост), а удаление элемента - из начала (головы) списка.
Начало очереди |
|
|
|
|
|
|
|
|
|
Конец очереди |
|
|
|
|
|
|
|
|
|
|
|
Рис. 1.14
При удалении элемента из начала очереди длина очереди уменьшается на единицу, а все последующие элементы сдвигаются к началу, то есть второй элемент становится первым, третий – вторым и так далее. Чем больше элементов находилось в очереди, тем больше действий по перемещению элементов необходимо произвести.
Если количество действий зависит от количества элементов, то такие действия называются массовыми.
Рассмотрим основные действия над очередью. Для того чтобы посмотреть, какие действия мы можем проводить с данными, которые организованы в очередь, введем несколько определений.
Максимальная длина очереди – максимальное количество элементов, которое может находиться в очереди одновременно.
Длина очереди - количество элементов, находящееся в очереди в данный конкретный момент.
Пустая очередь - очередь, в которой нет ни одного элемента.
Первое действие - "Поместить элемент в очередь":
Для того чтобы поместить элемент в очередь, необходимо проверить, есть ли в ней место, то есть меньше ли длина очереди максимальной длины. Если длина меньше максимальной длины, то помещаем элемент в конец очереди, и увеличиваем значение длины очереди на единицу, иначе - ничего не делаем (если длина очереди равна максимальной длине, то поместить в очередь новый элемент не представляется возможным).
Второе действие - "Взять элемент из очереди":
Для того чтобы взять элемент из очереди, необходимо проверить, есть ли элементы в очереди. Если очередь не пуста, то: а) удаляем первый по порядку элемент; б) сдвигаем оставшиеся элементы к началу очереди; в) уменьшаем на единицу значение длины очереди, иначе - ничего не делаем.