КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Двунаправленные списки
Туре PStroka = ^Stroka; Stroka = record Info:string; Sled: PStroka; End;. Здесь вначале объявлен типизированный указатель (pstroka) с базовым типом запись (stroka), а затем сам базовый тип. Звездочка на рис. 40 пред-
ставляет указатель Sled, a info - содержательную информацию. Следует обратить внимание, что синтаксически разрешается вначале объявлять указатель на несуществующий базовый тип, который обязательно далее должен быть объявлен. Рис- 40 Построим теперь список, например, из трех элементов. Пусть переменные si, 82, S3 содержат некоторую полезную информацию в виде строк, и пусть объявлены переменные: Var spisok, P:PStroka;. Переменная Spisok будет использована для хранения всего списка, ар- вспомогательный указатель. Напишем такой код для решения задачи: New(Spisok); {Начало списка} SpisokA. Info:=S1; {Запись строки SI в список} New(P); {Новый элемент списка} P^.Info:=S2; {Запись строки S2 в элемент Р} Spisok^.Sled:=P; {Подключение элемента два в список} New(P); {Третий элемент списка} P^.Info:=S3; {Запись строки S3 в элемент Р} Spisok^. Sled^.Sled:=P; { Подключение элемента 3 в список} P^.sled:=nil; {Конец списка} P:=nil; {Теперь указатель Р не нужен} В соответствии с этим кодом процесс формирования списка можно представить схематично так, как изображено на рис. 41. Рис. 41 Связанный список дает варианты альтернативного представления массивов. Отличие заключается в том, что число элементов в списке заранее неизвестно. Однако на этапе вьшолнения программы памяти под список выделяется ровно столько, сколько требуется для записи его элементов. Основными операциями, которые выполняются при работе с динамическими структурами данных, являются следующие: добавление элемента, исключение элемента, поиск заданного элемента. Структура двунаправленного связанного списка приводится на рис. 42. Данная структура соответствует следующему объявлению: Type PStroka = AStroka; Stroka = record Info:string; Pred,Sled: PStroka; End;. Рис. 42 Для построения связей между отдельными элементами списка используются два указателя: Pred - связь с предыдущим элементом и sled - связь с последующим элементом. Соответственно имеет место ограничение связей элементов списка и слева, и справа с помощью пустого указателя nil. Построим список из трех элементов, как в Предыдущем случае, и при условиях предыдущей задачи.
{Начало списка} {Запись строки SI в список} {Ограничение связей списка слева} {Новый элемент списка} {Запись строки S2 в элемент Р} {Связь с предыдущим элементом} {Подключение элемента два в список} {Третий элемент списка} {Запись строки S3 в элемент Р} {Связь с предыдущим элементом} {Подключение элемента 3 в список} {Конец списка}
На основе двунаправленного списка возможно формирование кольцевых связанных списков, когда самый первый элемент списка ссылается на последний элемент, а последний - на первый элемент.
СТЕКИ, ОЧЕРЕДИ Предполагается, что элементы в списках могут добавляться и извлекаться в произвольном порядке. Существуют списки с заранее заданными процедурами добавления и извлечения элементов. Это стеки и очереди. Очередью называется однонаправленный или двунаправленный связанный список с процедурой работы FIFO - First In, First Out (первым пришел, первым ушел). В списках типа очередь элемент добавляется в конец списка, а извлекается из начала списка. Стек - связанный список с процедурой работы LIFO - Last In, First Out (последним пришел, первым ушел). Элементы стека добавляются в конец списка и извлекаются из конца списка. Идентифицируется очередь с помощью двух указателей: запоминается начало очереди и конец списка. Стек можно идентифицировать одним указателем, помечая дно стека с помощью nil. БИНАРНЫЕ ДЕРЕВЬЯ Содержательную информацию часто требуется как-то ранжировать. С целью ранжирования информации вводится понятие ключа. Например, в шахматных программах очередные ходы помечают с помощью числовых критериев оценки текущей позиции. Одним из способов представления ранжированной информации является бинарное дерево. Бинарное дерево, по определению, - это иерархическая структура, схематично представляемая, например, так, как показано на рис. 43. Рис.43 Бинарное дерево имеет узлы, в которые может входить одна ветвь, а выходить не более двух (бинарное). Верхняя вершина не имеет входа и называется корнем. Построить бинарное дерево можно следующим образом. Пусть имеется набор числовых оценок для некоторого ключа, например, такой: 35, 86, 49, 27, 31, 56, 62, 44, 29, 26, 33, 88. Примем, что вправо по ходу дерева, начиная от корня, значение ключа увеличивается, а влево - уменьшается.
Дата добавления: 2014-12-29; Просмотров: 415; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |