- •Рекурсия. Виды. Особенности.
- •Прямая Рекурсия. Рекурсивное определение значение факториала
- •Косвенная Рекурсия. Опережающее описание.
- •Сортировка массивов. Типы сортировок.
- •Метод прямого обмена ..Пузырька
- •Метод прямого выбора:
- •Метод прямого включения
- •Алгоритмы поиска. Линейный поиск
- •Алгоритмы поиска. Поиск делением пополам
- •Статические и динамические переменные.
- •Указатели. Типы.
- •Доступ к переменной по указателю - разыменование указателя
- •Стандартные процедуры и функции управления динамической памятью
- •Динамические структуры данных: стек, очередь, список и их особенности.
- •Список. Типы списков. Операции над списками.
- •Выбор нового текущего элемента в списке.
- •Вывод всех элементов из списка.
- •Добавление нового элемента справа от текущего в списке.
- •Удаление текущего элемента из списка
- •Список.Удаление элемента справа от текущего.
- •Стек. Операции над стеком.
Динамические структуры данных: стек, очередь, список и их особенности.
Структурированные типы данных, такие, как массивы, множества, записи, представляют собой статические структуры, так как их размеры неизменны в течение всего времени выполнения программы.
Часто требуется, чтобы структуры данных меняли свои размеры в ходе решения задачи. Такие структуры данных называются динамическими, к ним относятся стеки, очереди, списки, деревья и другие.
Каждая компонента любой динамической структуры представляет собой запись, содержащую по крайней мере два поля: одно поле типа указатель, а второе - для размещения данных, например:
Type pnode=^node;
node=record
D:word;{информационная}
S:string;{часть}
P:pnode; {указатель на следующий элемент}
End;
Список. Типы списков. Операции над списками.
Различают:
Односвязные (каждый элемент связан со следующим);
Двусвязные (каждый элемент связан со следующим и с предыдущим)
Кольцевые (если последний элемент связан указателем с первым)
Операции над списками:
Начальное формирование списка(создание первого элемента);
Добавление элемента в конец списка;
Чтение элемента с заданным ключом;
Вставка элемента в заданное место;
Удаление элемента с заданным ключом;
Однонаправленный список
— информационная часть звена списка (величина любого простого или структурированного типа, кроме файлового),
Next — указатель на следующее звено списка;
First — указатель на заглавное звено списка.
Согласно определению, список располагается в динамически распределяемой памяти, в статической памяти хранится лишь указатель на заглавное звено. Звенья создаются и удаляются по мере необходимости, в процессе выполнения программы.
Двунаправленный список
Свойством такого списка является то, что для доступа к его элементам вовсе не обязательно хранить указатель на первый элемент. Достаточно иметь указатель на любой элемент списка. Первый элемент всегда можно найти по цепочке указателей на предыдущие элементы, а последний - по цепочке указателей на следующие. Но наличие указателя на заголовок списка в ряде случаев ускоряет работу со списком
Выбор нового текущего элемента в списке.
begin
readln(s);
pnt:=head;
repeat
if pnt^.data=s then current:=pnt;
pnt:=pnt^.next;
until pnt=nil;
end;
Вывод всех элементов из списка.
begin
pnt:=head; i:=1;
repeat
Writeln (i, “ √ ”, pnt^.data);
pnt:=pnt^.next;
i:=i+1;
until pnt=nil;
end;
Добавление нового элемента справа от текущего в списке.
begin
writeln(“элемент”); readln(s);
New (pnt);
pnt^.data:=s;
pnt^.last:=current;
pnt^.next:=current^.next;
pnt2:=current^.next;
if not(pnt2=nil) then pnt2^.last:=pnt;
end;
Добавление нового элемента слева от текущего в списке.
begin
writeln(“элемент”); readln(s);
new(pnt);
pnt^.data:=s;
pnt^.last:=current^.last;
pnt^.next:=current;
pnt2:=current^.last;
if not(pnt2=nil) then
pnt2^.next:=pnt;
end;