
- •Билет 2 Лексическая структура языка Pascal.
- •Билет 3 Структура Pascal-программы. Составной оператор. Константы. Переменные.
- •Билет 4. Концепция переменной языка паскаль.
- •Билет 5 Концепция типа данных языка Pascal.
- •Билет 6 Простые типы.
- •Билет 7 Стандартные типы языка Pascal.
- •Билет 8 Тип Boolean
- •Билет 9 Перечисляемый тип.
- •Билет 10. Ограниченные типы (диапазоны).
- •Билет 11 Условный оператор
- •Билет 12 Оператор варианта
- •Билет 13 Оператор цикла с постусловием
- •Билет 14 Оператор цикла с предусловием
- •Билет 15 Оператор цикла с параметром
- •Билет 16 Составные типы
- •Билет 17 Массивы, примеры использования
- •Билет 18 Записи, примеры использования
- •Билет 19 Оператор сцепления
- •Билет 20 Записи с вариантами
- •Билет 21 Множества (определение, примеры, операции).
- •Билет 22 Представления множеств, примеры использования.
- •Билет 22. Представления множеств.
- •Билет 23 Файловые типы
- •Билет 24 Операции с файлами
- •Билет 25 Текстовые файлы
- •Билет 26 Типизированные файла
- •Билет 27 Нетипизированные файлы
- •Билет 28 Процедуры и функции
- •Билет 29 Описание процедур и функций
- •Билет 30 Локальные и глобальные переменные
- •Билет 31 Параметры процедур и функций
- •Билет 32 открытые параметры.
- •Билет 33. Нетипизированные параметры.
- •Билет 34. Необходимость и преимущества модульного программирования. Структура модуля в языке Pascal.
- •Билет 35. Процедурный тип. Передача процедур и функций в качестве параметра.
- •Билет 36. Рекурсия.
- •Билет 37. Рекурсия и итерация.
- •Билет 38. Линейный поиск.
- •Билет 39. Поиск делением пополам.
- •Билет 40. Сортировка.
- •Билет 41. Сортировка простыми включениями.
- •Билет 42. Сортировка бинарными включениями
- •Билет 43. Сортировка простым выбором.
- •Билет 44. Сортировка простым обменом(пузырек).
- •Билет 45. Шейкер-сортировка.
- •Билет 46. Сортировка шелла.
- •Билет 47. Сортировка с разделением(быстрая сортировка).
- •Билет 48. Ссылочные типы.
- •Билет 49. Динамические структуры данных.
- •Билет 50. Создание и уничтожение динамических переменных.
- •Билет 51. Связные списки.
- •Билет 52. Связные списки. Создание очередного элемента. Просмотр списка.
- •Билет 53. Добавление компонента в середину списка.
- •Билет 54. Исключение компонент из середины списка.
- •Билет 55. Рекурсивная обработка списка.
- •Билет 56. Двусвязные кольца.
- •Билет 57. Деревья. Двоичные деревья. Двоичные деревья поиска.
- •Билет 58. Добавление узла к двоичному дереву поиска.
- •Билет 59. Поиск в двоичном дереве.
- •Билет 60. Просмотр двоичного дерева.
- •Билет 61. Удаление из дерева.
- •Билет 62. Деревья общего вида.
Билет 53. Добавление компонента в середину списка.
Совсем не трудно вставить компоненту (NPoint) в середину списка, когда имеется ссылка на компоненту, предшествующую данной в реорганизованном списке. Назовём её OPoint.
NPoint^.next := OPoint^.next;
OPoint^next := NPoint;
Эти операторы будут правильно работать и в том случае, если OPoint – последняя компонента в списке, т.е. OPoint^.next = nil. Если OPoint = nil, то выполнение этих операторов приводит к ошибке.
procedure InsertAfter (OPoint, NPoint: link);
begin NPoint^.next := OPoint^.next;
OPoint^next := NPoint end;
Труднее организовать процедуру InsertBefore, т.к. тогда новую компоненту надо вставлять перед компонентой, на которую у неё есть ссылка.
procedure InsertBefore (OPoint, NPoint: link; var head: link);
var cur: link;
begin If OPoint = head then begin
NPoint^.next := head;
head := NPoint; end
else begin
cur := head;
while cur^.next<>OPoint do cur := cor^.next;
cur^.next := NPoint;
NPoint^next := OPoint end;
end;
Имеется ещё один способ реализации процедуры InsertBefore. Им пользуются тогда, когда кол-во информации, содержащейся в компонентах списка не очень велико, а список достаточно длинный. Сначала новая компонента с помощью процедуры InsertAfter помещается в список, но попадает не на своё место, а затем меняется местами содержимое компонент.
procedure InsertBefore2 (OPoint, NPoint: link);
var temp:Point; begin NPoint^.next:=OPoint^.next; OPoint^.next:=NPoint; temp:=OPoint^; OPoint^:=NPoint^; NPoint^:= temp; end;
Билет 54. Исключение компонент из середины списка.
Операция исключения компонент из середины списка будет простй тогда, когда имеется ссылка на компоненту, предшествующую исключаемой компоненте. Назовем её PREV.
prev^.next := prev^.next^.next;
Здесь также можно рассмотреть два варианта:
1) Удаление первого объект из списка и присваивание указателя на него в переменную out.
Procedure delete_head(ver out:link); Begin Out:=head Head:=head^.next; End;
2) Удаление из списка элемента, стоящего после prev, на который имеется ссылка, и присвоение указателю на него переменной Out происходит следующим образом.
procedure DeleteAfter (prev: link; var Out: link); begin Out := prev^.next; prev^.next := prev^.next^.next; end;
Чаще встречаются ситуации, когда ссылка указывает на ту компоненту, которая подлежит исключению. При этом для нахождения предыдущей компоненты приходится просматривать весь список, кроме того, нужно обращать внимание на тот случай, когда удаляемая компонента окажется первой.
procedure Delete (our: link; var head: link); var cur: link; begin if out= head then head := out^.next else begin cur := head; while cur^.next<>out do cur := cur^.next; cur^.next := out^.next; end; end;