Динамические структуры данных. Алексеев А.Ю - 32 стр.

UptoLike

{5} procedure Write_List ( x : Ref_S_expr );
begin {выводит последовательность элементов }
if not Null( x ) then {списка без обрам ляющихего скобок}
begin Write_H_list ( Head ( x ) ); Write_List ( Tail ( x ) )
end;
end {Write_List};
Смысл сообщений об ошибках, обнаруженных при вводе иерархического
списка, очевиден. Пробелы при вводе списка игнорируются. Процедуру выво-
да списка предлагается написать самостоятельно.
1.8. Упражнения
Каждое задание предполагает самостоятельную разработку студентом од-
ного или нескольких модулей Турбо-Паскаля, реализующих согласованный с
преподавателем набор операций над списками, а также главной программы,
непосредственно решающей поставленную задачу.
В заданиях 1-16 термином "список" обозначен линейный список. При выпол-
нении этих заданий следует применять по указанию преподавателя итеративные
или рекурсивные процедуры обработки линейных списков. Задание 17 предлага-
ется выполнить в двух вариантах: с использованием базовых функций рекурсив-
ной обработки иерархических списков и без использования рекурсии.
Во всех случаях, когда это не оговорено особо, предполагается, что исход-
ные и результирующие списки размещаются в файлах подходящего типа. Для
представления иерархических списков в задании 17 рекомендуется использо-
вать сокращенную скобочную запись.
1. Вставить в список l элементов типа Real:
а) новый элемент e1 перед каждым вхождением элемента e;
б) новый элемент e1 за каждым вхождением элемента e;
в) новый элемент e так, чтобы сохранилась упорядоченность по неубыва-
нию исходного непустого списка.
2. Удалить из списка l элементов типа Real:
а) за каждым вхождением элемента e один элемент, если такой есть и он
отличен от e;
б) все отрицательные элементы.
3. Проверить:
а) равны ли списки l1 и l2;
б) входит ли список l1 в список l2;
в) равны ли множества, представленные списками l1 и l2 ( рассматривать
одинаковые элементы списка как один элемент множества);
г) составляют ли элементы списка l1 подмножество элементов списка l2;
д) есть ли в списке l хотя бы два одинаковых элемента;
е) предшествует ли в списке l первое вхождение элемента e1 первому вхо-
ждению элемента e2.
32
{5} procedure Write_List ( x : Ref_S_expr );
   begin                      {выводит последовательность элементов }
      if not Null( x ) then {списка без обрам ляющихего скобок}
           begin Write_H_list ( Head ( x ) ); Write_List ( Tail ( x ) )
           end;
   end {Write_List};

   Смысл сообщений об ошибках, обнаруженных при вводе иерархического
списка, очевиден. Пробелы при вводе списка игнорируются. Процедуру выво-
да списка предлагается написать самостоятельно.


                              1.8. Упражнения

   Каждое задание предполагает самостоятельную разработку студентом од-
ного или нескольких модулей Турбо-Паскаля, реализующих согласованный с
преподавателем набор операций над списками, а также главной программы,
непосредственно решающей поставленную задачу.
   В заданиях 1-16 термином "список" обозначен линейный список. При выпол-
нении этих заданий следует применять по указанию преподавателя итеративные
или рекурсивные процедуры обработки линейных списков. Задание 17 предлага-
ется выполнить в двух вариантах: с использованием базовых функций рекурсив-
ной обработки иерархических списков и без использования рекурсии.
   Во всех случаях, когда это не оговорено особо, предполагается, что исход-
ные и результирующие списки размещаются в файлах подходящего типа. Для
представления иерархических списков в задании 17 рекомендуется использо-
вать сокращенную скобочную запись.
   1. Вставить в список l элементов типа Real:
   а) новый элемент e1 перед каждым вхождением элемента e;
   б) новый элемент e1 за каждым вхождением элемента e;
   в) новый элемент e так, чтобы сохранилась упорядоченность по неубыва-
нию исходного непустого списка.
   2. Удалить из списка l элементов типа Real:
   а) за каждым вхождением элемента e один элемент, если такой есть и он
отличен от e;
   б) все отрицательные элементы.
   3. Проверить:
   а) равны ли списки l1 и l2;
   б) входит ли список l1 в список l2;
   в) равны ли множества, представленные списками l1 и l2 ( рассматривать
одинаковые элементы списка как один элемент множества);
   г) составляют ли элементы списка l1 подмножество элементов списка l2;
   д) есть ли в списке l хотя бы два одинаковых элемента;
   е) предшествует ли в списке l первое вхождение элемента e1 первому вхо-
ждению элемента e2.
                                      32