![](/user_photo/2706_HbeT2.jpg)
- •Содержание
- •Раздел 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-памяти
- •Управление оверлейным буфером
- •Литература Основная и дополнительная литература
- •Перечень наглядных пособий, методических указаний, методических материалов и используемых в учебном процессе технических средств
Вставка элемента
Пусть в программе имеется описание типа, приведенное в примере 7.8.
Алгоритм вставки элемента в указанное место двунаправленного кольцевого списка:
Порождение нового звена.
Занесение вставляемого элемента в информационное поле порожденного звена.
Занесение в поле Adrcled порожденного звена ссылки на следующий элемент из звена, предшествующего вставляемому.
Занесение в поле Adrpred порожденного звена ссылки на предыдущий элемент из звена, следующего за вставляемым.
Занесение в поле Adrpred следующего за вставляемым звена ссылки на вставляемое звено.
Занесение в поле Adrcled предшествующего звена ссылки на вставляемое звено.
Действия, необходимые для вставки элемента в двунаправленный кольцевой список с заглавным звеном, схематически поясняют Рисунок 7 .65 – Рисунок 7 .66.
Фрагмент исходного списка иллюстрирует Рисунок 7 .65.
Рисунок 7.65 - Фрагмент исходного двунаправленного списка
Пусть в исходный список после элемента 1 вставляется элемент 3. Соответствующий фрагмент результирующего списка будет иметь вид, который изображает Рисунок 7 .66.
На данном рисунке номера 1) – 6) соответствуют номерам этапов алгоритма вставки.
Рисунок 7.66 - Фрагмент результирующего двунаправленного списка
Пример 7.9.
Процедура вставки.
Procedure Vstav (Elem: <Тип_элемента_списка>; Predzv: Adr2);
{Elem – вставляемый элемент, Predzv –
ссылка на предшествующий элемент}
Var Q: Adr2;
Begin
{1} New (Q);
{2} Q^.Element := Elem;
{3} Q^.Adrcled := Predzv^.Adrcled;
{4} Q^.Adrpred := Predzv;
{5} Predzv^.Adrcled^.Adrpred := Q;
{6} Predzv^.Adrcled := Q;
End;
В данном примере номера операторов, приведенные в комментариях, соответствуют номерам этапов алгоритма вставки. Реализация этапа 4 в примере отличается от этапа 4 алгоритма вставки, поскольку ссылка на предшествующее звено в процедуру Vstav передается в качестве параметра.
Создание двунаправленного кольцевого списка с заглавным звеном
Пусть в программе имеется описание типа, приведенное в примере 7.8.
Для создания кольцевого списка можно использовать процедуру вставки, приведенную в примере 7.9. При этом на каждом шаге создания список должен быть закольцован.
Пример 7.10.
Ввод исходного текста и представление его в виде двунаправленного кольцевого списка с заглавным звеном. Признак окончания текста – точка. Раздел типов соответствует примеру 7.8.
Var
Ring: Adr2; {Адрес заглавного звена кольца}
Bykva: Char; {Символ исходного текста}
Begin
{7} New (Ring); {Отведено место в памяти для заглавного звена}
{8} Ring^.Adrcled := Ring; {Закольцовывается заглавное звено, так как}
{9} Ring^.Adrpred := Ring; {на каждом промежуточном этапе список
должен быть кольцом}
Read (Bykva); {Чтение первой буквы текста}
While Bykva <> ’.’ Do
Begin
Vstav (Bykva, Ring^.Adrpred); {Вызов процедуры вставки. Адрес
предыдущего созданного звена (последнего
звена кольца) всегда хранится в заглавном звене
в поле Adrpred}
Read (Bykva) {Чтение очередной буквы текста}
End
End.
Схематические пояснения к данной программе содержит Рисунок 7 .67.
Рисунок 7.67 – Схематические пояснения к программе примера 7.10
На данном рисунке цифрами 1) – 6) обозначены номера этапов алгоритма вставки, приведенного в предыдущем подразделе, цифрами 7) – 9) – номера соответствующих операторов из примера 10.
Напомним, что список закольцовывается после добавления каждого нового звена.