- •Тема 16: ссылочные типы. Списки
- •16.33. Пусть l обозначает кольцевой (циклический) двунаправленный список с заглавным звеном (рис. 15) при следующем описании такого списка;
- •Тема 17: очереди, стеки, двоичные деревья
- •17.3. Для работы со стеком, т. Е. Последовательностью элементов, в которой элементы всегда добавляются в конец и удаляются из конца («последним пришел —первым ушел») нужны обычно следующие операции:
- •17.7. Используя очередь или стек (считать уже описанными их типы и операции над ними—см. 17.1 и 17.3), описать процедуру или функцию, которая:
- •17.14. Пусть в дереве-формуле (см. Упр. 17.13) в качестве терминалов используются не только цифры, но и буквы, играющие, роль переменных. Описать процедуру, которая:
17.7. Используя очередь или стек (считать уже описанными их типы и операции над ними—см. 17.1 и 17.3), описать процедуру или функцию, которая:
а) присваивает параметру Е элемент из самого левого листа непустого дерева Т (лист—вершина, из которой не выходит ни одной ветви);
б)* определяет число вхождений элемента Е в дерево Т;
в) вычисляет среднее арифметическое всех элементов непустого дерева Т (ТЭД=rеа1)
г) заменяет в дереве Т все отрицательные элементы на их абсолютные величины (ТЭД=rеа1);
д) меняет местами максимальный и минимальный элементы непустого дерева 7, все элементы которого различны (ТЭД=rеа1);
с) печатает элементы из всех листьев дерева Т (ТЭД=reаl)
ж)* печатает все элементы дерева Т по уровням! сначала—из корня дерева, затем (слева направо)—из вершин, дочерних по отношению к корню, затем (также слева направо)—из вершин, дочерних по отношению к этим вершинам, и т. д. (ТЭД=integer);
з) находит в непустом дереве Т длину (число ветвей) пути от корня до ближайшей вершины с элементом Е; если Е не входит в Т, за ответ принять —1;
и) подсчитывает число вершин на n-ом уровне непустого дерева Т (корень считать вершиной 0-го уровня).
17.8. Описать рекурсивную функцию или процедуру, которая:
а) определяет, входит ли элемент Е в дерево Т
б)* определяет число вхождений элемента Е в дерево T;
в) вычисляет сумму элементов непустого дерева Т (ТЭД=rеа1);
г) находит величину наибольшего элемента непустого дерева Т (ТЭД=rеа1);
д) печатает элементы из всех листьев дерева Т (ТЭД= char);
е)* определяет максимальную глубину непустого дерева T, т. е. число ветвей в самом длинном из путей от корня дерева до листьев;
ж) подсчитывает число вершин на n-ом уровне непустого дерева Т (корень считать вершиной 0-го уровня).
17.9. Рекурсивно и нерекурсивно описать логическую функцию equal(T1T2), проверяющую на равенство деревья Т1 и Т2.
17.10*. Описать процедуру сору(Т,Т1) которая строит T1—копию дерева Т.
17.11. Описать процедуру create(T,n), где n—положительное целое число, которая строит Т—дерево, показанное на рис. 19.
Описать логическую функцию same(T)t определяющего, есть ли в дереве Т хотя бы два одинаковых элемента.
Формулу вида:
<формула>::=<терминал> |
(<формула><знак><формула>)
<знак>::=+|—|*
<тернинал>::=0|1 |2|3|4 |5 | 6|7|8 |9
можно представить в виде двоичного дерева («дерева-формулы») с ТЭД=char согласно следующим правилам:формула из одного терминала (цифры) представляется; деревом из одной вершины с этим терминалом, а формула вида:
(f1 s f2)—деревом, в котором корень—это знак s, а левое и правое поддеревья — это соответствующие представления формул , f1 и f2. (На рис. 20 показано дерево-формула, соответствующее формуле (5*(3+8)).)
Описать рекурсивную функцию или процедуру, которая:
a) вычисляет (как целое число) значение дерева-формулы Т;
б) по формуле из текстового файла f строит соответствующее дерево-формулу Т;
b) печатает дерево-формулу Т в виде соответствующей формулы;
г) проверяет, является ли двоичное дерево Т деревом- формулой..