- •25. Программный модуль
- •26Указатели в Паскале. Динамическая память на языке Паскаль
- •Ссылочные типы. Указатели в Паскале
- •Операции с указателями
- •Процедуры и функции для работы с указателями и адресами в Паскале
- •27. Динамические структуры данных | Связные списки
- •1 Связное представление данных в памяти
- •2 Связные линейные списки
- •2.1 Машинное представление связных линейных списков
- •2.2 Реализация операций над связными линейными списками
- •3. Нелинейные разветвленные списки
- •3.1 Основные понятия
- •3.2 Представление списковых структур в памяти.
- •3.3 Операции обработки списков
- •28. Стек и очередь
- •29. Системы программирования
- •30. Языки программирования
- •33. Накопители на гибких магнитных дисках
- •35Видеосистема персонального компьютера.
- •История
- •Технический обзор
- •Новые возможности по сравнению с Си
- •Не объектно-ориентированные возможности
- •Стандартная библиотека
- •Объектно-ориентированные особенности языка
- •Проблемы старого подхода
- •Инкапсуляция
- •Описание функций в теле класса
- •Конструкторы и деструкторы
- •Другие возможности функций-членов
- •Наследование
- •Полиморфизм
- •Будущее развитие
- •История названия
- •Пример №1
- •Пример №2
- •Пример №3
- •Пример №4
- •Описание и инициализация переменных
- •Int k; // это переменная целого типа int
- •Задание и использование констант
- •Описание и инициализация переменных
- •Int k; // это переменная целого типа int
- •Задание и использование констант
- •5.3.1. Символьные типы
- •5.3.2. Числовые типы
- •5.3.3. Типы дата/время
- •5.3.4. Двоичные типы
- •5.3.5. Пользовательские типы данных
- •2. [Проверка домашнего задания]
- •3. Актуализация знаний и умений учащихся по пройденному материалу
- •5. Реализация, составление алгоритмов с использованием повторения. Графика в программе Паскаль авс.
- •6. Ребус. Правильная осанка
- •9*. Тестирование
- •Операции над строками
- •Операции над строками
- •2. Объединения
- •Комбинированные типы. Записи
- •Обработка записей в Паскале
- •Оператор присоединения в Паскале
- •Вввод / вывод записей в Паскале
- •Примеры программ
3. Нелинейные разветвленные списки
3.1 Основные понятия
Нелинейным разветвленным списком является список, элементами которого могут быть тоже списки. Если в 2-связном списке один из указателей каждого элемента списка задает порядок обратный к порядку, устанавливаемому другим указателем, то такой двусвязный список будет линейным. Если же один из указателей задает порядок произвольного вида, не являющийся обратным по отношению к порядку, устанавливаемому другим указателем, то такой список будет нелинейным.
В обработке нелинейный список определяется как любая последовательность атомов и списков (подсписков), где в качестве атома берется любой объект, который при обработке отличается от списка тем, что он структурно неделим. Если мы заключим списки в круглые скобки, а элементы списков разделим запятыми, то в качестве списков можно рассматривать такие последовательности: (a,(b,c,d),e,(f,g)) ( ) ((a)) Первая из приведенных последовательностей показана на рис. 5.2.
Рис.5.2. Нелинейный список
Разветвленные списки описываются тремя характеристиками: порядком, глубиной и длиной.
Порядок. Над элементами списка задано транзитивное отношение, определяемое последовательностью, в которой элементы появляются внутри списка. В списке (x,y,z) атом x предшествует y, а y предшествует z. При этом подразумевается, что x предшествует z. Данный список не эквивалентен списку (y,z,x). При представлении списков графическими схемами порядок определяется горизонтальными стрелками. Горизонтальные стрелки истолковываются следующим образом: элемент из которого исходит стрелка, предшествует элементу, на который она указывает. Глубина. Это максимальный уровень, приписываемый элементам внутри списка или внутри любого подсписка в списке. Уровень элемента предписывается вложенностью подсписков внутри списка, т.е. числом пар круглых скобок, окаймляющих элемент.
Длина - число элементов уровня 1 в списке.
3.2 Представление списковых структур в памяти.
В соответствии со схематичным изображением разветвленных списков типичная структура элемента такого списка в памяти должна быть такой, как показано на рис.5.3.
data - данные атома
down - указатель на подсписок того же уровня
next - указатель на следующий элемент
Рис.5.3. Структура элемента разветвленного списка Элементы списка могут быть двух видов: атомы - содержащие данные и узлы - содержащие указатели на подсписки. В атомах не используется поле down элемента списка, а в узлах - поле data. Поэтому логичным является совмещение этих двух полей в одно, как показано на рис.5.4.
type |
data/down |
next |
Рис.5.4. Структура элемента разветвленного списка Поле type содержат признак атом/узел, оно может быть 1-битовым. Такой формат элемента удобен для списков, атомарная информация которых занимает небольшой объем памяти. В этом случае теряется незначительный объем памяти в элементах списка, для которых не требуется поля data. В более общем случае для атомарной информации необходим относительно большой объем памяти. Наиболее распространенный в данной ситуации формат структуры узла представленный на рис.5.5.
type |
down |
next |
Рис. 5.5. Структура элемента разветвленного списка В этом случае указатель down указывает на данные или на подсписок. Поскольку списки могут составляться из данных различных типов, целесообразно адресовать указателем down не непосредственно данные, а их дескриптор, в котором может быть описан тип данных, их длина и т.п. Само описание того, является ли адресуемый указателем данных объект атомом или узлом также может находиться в этом дескрипторе. Удобно сделать размер дескриптора данных таким же, как и элемента списка.