Міністерство освіти і науки України
 Національний технічний університет України "КПІ"
 Кафедра медичної кібернетики та телемедицини
Лабораторна робота №2
 Тема: Динамічні структури даних
 Варіант №16 (задача 17.16).
Виконав:
 студент ІМ-81
 Плахтій Артур Миколайович
 Перевірив:         
 старший викладач
 Зінченко Ніна Павлівна
 Київ 2009
 
  Содержание
 1. Теоретическая часть
 Некоторые линейные списки
 Построение сложных структур в динамической памяти
 Бинарные деревья
 2. Условия задачи
 Текст программы
 Екран результату
 Контрольні розрахунки
 Висновок
 Список літературних джерел
 
  1. Теоретическая часть  
 Некоторые линейные списки  
 Стек создается как линейный список. Пусть Top - указатель на начало стека. Стек удобно строить в обратном порядке. Следующий фрагмент программы демострирует основные операции работы со стеком:
 Type ukaz=stak, stak=record inf: integer, next: ukaz, end, Var Top,Tek: ukaz; value: integer Procedure DobavS;
 Begin new (Tek) readln (Tek. inf) Tek. next: =Top Top: =Teк End Procedure UdalS Begin Top: =Top. next if Top=0 then writeln (‘нехватка элементов’) End
 Для организация очереди можно использовать аналогичный ссылочный тип, при этом необходимо иметь указатели на начальный nach и конечный kon элементы. Очередь удобно строить в прямом порядке (рис.1).
  Рис.1. Пример построения очереди в прямом порядке
  
 Циклически связанный список (циклический список) - такой список, в котором связь от последнего узла идет к первому элементу списка. На рис.2 изображен односвязный циклический список. В нем можно получить доступ к любому элементу списка, отправляясь от любой точки.
  Рис.2. Пример циклического списка
 Наиболее важные операции для односвязных циклических списков:
 1. включить элемент слева
 2. включить элемент справа
 3. исключить узел слева
 Если nach1 и nach2 указывают на два разных списка L1 и L2 (см. рис.3), то можно включить справа в список L1 весь список L2, для чего нужно выполнить присваивания, используя промежуточную переменную PP типа pointer:
 Var PP: pointer {... } PP: =nach1. link nach1. link: =nach2. link nach2. link: = PP
  Рис.3. Циклический список L1 + L2
 Каждый элемент списка с двумя связями содержит два указателя: на соседние слева и справа элементы (см. рис.4). По такому списку удобно двигаться вперед и назад, так как он содержит два входа в список. Для создания двусвязного списка можно использовать следующий тип:
 Type ptr=element element=record d: integer right,left: ptr end
  Рис.4. Пример списка с двумя связями (двунаправленный список)
 Важное преимущество двусвязного списка состоит в том, что для того чтобы удалить элемент tek, достаточно знать только адрес этого узла, так как адреса предыдущего и следующего элементов хранятся в tek. left и tek. right:
 tek. left. right: =tek. right tek. right. left: =tek. left
 Здесь вы можете проверить, как вы научились работать с двунаправленным списком.
 Списки с полутора связями представляют собой чередование элементов с одной и двумя связями. Их преимущество: требуют меньше памяти, чем двусвязные, но ходить по списку можно вперед и назад.
  Рис.5. Пример списка с полутора связями
 Построение сложных структур в динамической памяти С помощью указателей можно создавать самые разнообразные структуры, в том числе более сложные, чем простые линейные списки.  ............