- •Содержание
- •Раздел 1.Подпрограммы Общие сведения
- •Процедуры Описание процедур
- •Вызов процедур
- •Процедуры без параметров
- •Процедуры с параметрами
- •Параметры-значения
- •Параметры-переменные
- •Параметры-константы
- •Параметры-переменные без типа
- •Параметры процедурного типа
- •Использование производных типов в качестве параметров подпрограмм
- •Принцип локализации имен
- •Функции Описание функций
- •Вызов функции
- •Рекурсивные подпрограммы
- •Директивы
- •Библиотечные модули пользователя Общие сведения
- •Структура модуля Unit
- •Особенности работы с модулями
- •Подключение к программе внешнего файла
- •Раздел 2.Простейший ввод-вывод Процедуры ввода из стандартного текстового файла Input
- •248 15 4 70 Значения 1-й строки
- •11 Значения 2-й строки
- •Процедуры вывода в стандартный текстовый файл Output
- •Раздел 3.Записи Структура записи
- •Записи без вариантной части
- •Записи с вариантами
- •Оператор присоединения With
- •Константа-запись
- •Раздел 4.Множества Общие сведения
- •Конструктор множества
- •Задание множественного типа
- •Операции над множествами
- •Ввод / вывод значения множественной переменной
- •Типизованные константы-множества
- •Раздел 5.Файлы Общие сведения
- •Процедура Assign
- •Файлы с типом
- •Процедура Assign
- •Процедура Rewrite (f)
- •Процедура Write (f, v1 [, v2, … , vn])
- •Процедура Reset (f)
- •Процедура Read (f, V [, v2, …, vn])
- •Функция Eof(f)
- •Процедура Seek (f, n)
- •Функция Filepos (f)
- •Функция Filesize(f)
- •Процедура Close (f)
- •Текстовые файлы
- •Процедура Assign (f, Name)
- •Процедура AssignСrt(f)
- •Процедура Append (f)
- •Процедура Rewrite (f)
- •Процедура Reset (f)
- •Процедура Read ([f,] v1 [, v2, …, vn])
- •Процедура Readln [([f] [,] [v1, v2, …, vn])]
- •Процедура Write ([f,] e1 [, e2, …, en])
- •Процедура Writeln([f,][e1,e2, …,en])
- •Процедура Close(f)
- •Процедура SetTextBuf (f, Buf [, Size])
- •Процедура Flush (f)
- •Сравнительная характеристика представления информации в файлах с типом и текстовых файлах
- •I. Представление числовой информации.
- •II. Представление текстовой информации.
- •Файлы без типа
- •Процедуры Reset и Rewrite
- •Процедура Blockread
- •Процедура Blockwrite
- •Проверка операций ввода-вывода
- •Раздел 6.Ссылочный тип (тип указатель) Общие сведения
- •Методы работы с динамическими переменными
- •Процедуры New и Dispose
- •Процедуры Getmem и Freemem
- •Процедуры Mark и Release
- •Раздел 7.Динамические структуры данных Динамические цепочки Структура динамической цепочки
- •Формирование цепочки
- •Поиск элемента в цепочке
- •Удаление элемента из цепочки
- •Вставка элемента в цепочку
- •Линейный однонаправленный список
- •Двунаправленные списки
- •Вставка элемента
- •Создание двунаправленного кольцевого списка с заглавным звеном
- •Удаление элемента
- •Поиск элемента
- •Очереди и стеки
- •Очередь lifo
- •Очередь fifo
- •Общие сведения
- •Способы организации таблиц
- •Однонаправленный список.
- •Однонаправленный список с упорядоченными записями.
- •Однонаправленный список с отдельным хранением текста записи.
- •Представление в виде массива.
- •Двоичное дерево.
- •Двоичные деревья Структура двоичного дерева
- •Построение дерева
- •Поиск записи в дереве
- •Включение записи в дерево
- •Удаление записи из дерева
- •Раздел 8.Оверлеи Общие сведения
- •Правила оформления оверлейных программ
- •Инициализация работы оверлеев
- •Включение администратора оверлеев
- •Обработка ошибок администратора
- •Размещение оверлейного файла в ems-памяти
- •Управление оверлейным буфером
- •Литература Основная и дополнительная литература
- •Перечень наглядных пособий, методических указаний, методических материалов и используемых в учебном процессе технических средств
Очередь lifo
Наиболее часто в программировании используются очереди второго вида – стеки. Принцип их работы – «Последний пришел – первый вышел».
В стеке доступна единственная позиция, называемая вершиной стека – это позиция, в которой находится последний по времени поступления в стек элемент.
Наиболее быстрое выполнение операций над стеком обеспечивает его представление в виде динамической цепочки звеньев (однонаправленного списка). Вершиной стека обычно является первое звено цепочки. Заглавное звено в цепочке стека не нужно, так как в стеке доступна только его вершина.
При использовании структуры однонаправленного списка стек задается с помощью описания типа, приведенного в примере 7.7, и дополнительно может быть введен тип указателя, представляющего стек как единую структуру, то есть ссылка на вершину стека Stek:
Type
<Задание стека по примеру 7.7>;
Stek = Adres1;
Реальный стек вводится с помощью описания переменной:
Var
St: Stek;
Схематично стек изображается аналогично цепочке (Рисунок 7 .70).
Рисунок 7.70 – Схематичное представление стека
К началу использования стека его нужно сделать пустым:
St := Nil;
А. Занесение элемента в стек
Пусть в программе имеется описание типа, приведенное в примере 7.7.
Алгоритм занесения элемента в стек:
Создание нового звена.
Занесение в новое звено элемента.
Занесение в новое звено адреса предыдущей вершины стека.
Созданное звено сделать вершиной стека.
Пример 7.13.
Процедура занесения элемента в стек. Первый параметр задает нужный стек (если их несколько), второй – заносимое в него значение.
Procedure Zanes (Var St: Stek; El:<Тип_элемента_стека>);
Var
Q: Adres1;
Begin
{1} New (Q);
{2} Q^.Element := El;
{3} Q^.Adrcled := St;
{4} St := Q
End;
Номера операторов в данной программе соответствуют номерам этапов алгоритма занесения элемента в стек.
Б. Выбор элемента из стека
Пусть в программе имеется описание типа, приведенное в примере 7.7.
Алгоритм выбора элемента из стека:
Прочитать значение из вершины стека.
Запомнить ссылку на старую вершину.
Исключить первое звено из стека.
Уничтожить первое звено.
Пример 7.14.
Процедура выбора элемента из стека. Первый параметр задает нужный стек (если их несколько), во второй передается значение из вершины стека.
Procedure Vibor (Var St: Stek; Var A: <Тип_элементов_стека>);
Var
Q: Adres1;
Begin
{1} A := St^.Element;
{2} Q := St;
{3} St := St^.Adrcled;
{4} Dispose (Q)
End;
Номера операторов в данной программе соответствуют номерам этапов алгоритма выбора элемента из стека.
Если необходимо ускорить процедуру выбора, то операторы Q := St и Dispose(Q) можно не применять. Однако это приведет к неэффективному использованию памяти.
В. Создание стека
Пусть в программе имеется описание типа, приведенное в примере 7.7.
Для создания стека может быть использована процедура Zanes из примера 7.13.
Пример 7.15.
Создание стека. Ввод исходного текста в стек. Признак окончания текста – точка.
…
Var
St: Adres1;
Bykva: Char;
Begin
St := Nil;
Read (Bykva);
While Bykva <>’.’ Do
Begin
Zanes (St, Bykva);
Read (Bykva)
End
End.