- •СТРУКТУРЫ ДАННЫХ И АЛГОРИТМЫ
- •Глава 1 Линейные списки
- •Понятие структуры данных
- •Тип указатель
- •Линейный список
- •Линейный однонаправленный (односвязный) список
- •Линейный двунаправленный (двусвязный) список
- •Практическое задание «Линейные списки»
- •Задачи для самостоятельной работы
- •Контрольные вопросы
- •Глава 2 Структуры данных стек и очередь
- •Понятие структуры данных стек и очередь
- •Структура данных стек
- •Структура данных очередь
- •Пример решения задачи с использованием стека
- •Практическое задание «Стеки и очереди»
- •Задачи для самостоятельной работы
- •Контрольные вопросы
- •Глава 3 Древовидные структуры данных
- •Понятие структуры данных дерево
- •Представление структуры бинарное дерево в памяти
- •Обход дерева
- •Основные операции над деревом
- •Ввод дерева
- •Практическое задание «Бинарные деревья»
- •Задачи для самостоятельной работы
- •Контрольные вопросы
- •Глава 4 Структура данных таблица
- •Понятие структуры данных таблица
- •Представление таблицы в памяти
- •Организация хеш-таблиц
- •Выбор функции расстановки
- •Разрешение коллизии
- •Операции над таблицами
- •Практическое задание «Управление таблицами»
- •Задачи для самостоятельной работы
- •Контрольные вопросы
- •Глава 5 Алгоритмы упорядочения данных
- •Понятие операции упорядочения
- •Алгоритмы упорядочения
- •Сортировка слиянием
- •Основные алгоритмы сортировки посредством сравнений
- •Улучшенные алгоритмы сортировки сравнением
- •Практическое задание «Алгоритмы сортировки»
- •Задачи для самостоятельной работы
- •Контрольные вопросы
- •Библиографический список
4Даны действительные числа x1, x2, ... , xn (n 2 и заранее неизвестно). Вычислить:
а) x1xn + x2xn - 1 + ... + xnx1;
б) (x1 + xn)(x2 + xn - 1) ... (xn + x1);
в) (x1 + x2 + 2xn)(x2 + x3 + 2xn - 1) ... (xn - 1 + xn + 2x2).
5Даны действительные числа y1, y2, ... , yn (n 2 и заранее неизвестно). Получить последовательность:
а) y1, y2, ... , yn, y1, ... , yn; б) y1, y2, ... , yn, yn, ... , y1; в) yn, yn - 1, ... , y1, y1, ... , yn.
6Даны действительные числа a1, a2, ... , a2n (n 2 и заранее неизвестно). Вычислить:
а) a1a2n + a2a2n - 1 + ... + anan + 1;
б) min(a1 + an + 1 , a2 + an + 2, ... , an + a2n);
в) max(min(a1, a2n), min(a3, a2n - 2), ... , min(a2n - 1, a2)).
Задачи для самостоятельной работы
1Для указанного ниже представления списка, опишите на языке C соответствующий тип list, определите переменную p (и, если необходимо, вспомогательные переменные) и напишите последовательность операторов для создания этого списка.
а)
36
б)
в)
г)
д)
2Для указанного ниже представления списка, опишите на языке C соответствующий тип list, определите переменную p (и, если необходимо, вспомогательные переменные) и напишите последовательности операторов для создания этого списка и его преобразования к списку нового вида.
а)
б)
37
в)
3Для указанного ниже представления списка, опишите на языке C соответствующий тип list (считать тип информационной части элементов простым), определите переменную L (и, если необходимо, вспомогательные переменные) и напишите последовательность операторов для:
1)вычисления суммы последнего и предпоследнего элементов непустого списка;
2)вычисления среднего арифметического элементов непустого списка;
3)обмена местами первого и последнего элементов непустого списка.
Для выполнения задания использовать один из двух видов списка:
а)
б)
Линейные односвязные списки
1 Описать процедуру или функцию, которая: а) проверяет на равенство списки L1 и L2;
б) определяет, входит ли список L1 в список L2;
38
в) добавляет в конец списка L1 все элементы списка L2;
г) проверяет, есть ли в списке L хотя бы два одинаковых элемента;
д) оставляет в списке L только первые вхождения одинаковых элементов;
e)формирует список L, включив в него по одному разу элементы, которые входят хотя бы в один из списков L1 и L2;
ж) формирует список L, включив в него по одному разу элементы, которые входят одновременно в оба списка L1 и L2.
2 Описать рекурсивную процедуру или функцию, которая: а) определяет, входит ли заданный элемент в список;
б) подсчитывает число вхождений заданного элемента в список;
в) удаляет из списка первое вхождение заданного элемента; г) находит максимальный элемент непустого списка;
д) заменяет в списке все вхождения заданного элемента на его абсолютное значение (тип элемента списка вещественный).
Линейные двусвязные списки
1В текстовом файле дана последовательность символов, оканчивающаяся точкой. Написать подпрограмму, которая
а) проверяет, симметричен ли относительно его середины двусвязный кольцевой список. Используя эту подпрограмму, проверить, симметрична ли относительно ее середины заданная последовательность символов;
б) печатает последовательность символов в обратном порядке. Используя эту подпрограмму, напечатать заданную последовательность.
39
2 Дана последовательность из не менее чем двух различных натуральных чисел оканчивающаяся нулем. Написать подпрограмму, которая:
а) печатает в обратном порядке все числа между наибольшим и наименьшим числами (т. е. в порядке от наименьшего к наибольшему) этой последовательности;
б) печатает эти числа в порядке их не убывания. Используя эту подпрограмму, напечатать заданную последовательность.
3В текстовом файле дана последовательность чисел. Написать подпрограмму, которая
а) проверяет, упорядочена ли последовательность действительных чисел, хранящаяся в двунаправленном списке. Используя эту подпрограмму преобразовать заданную последовательность следующим образом, если она упорядочена, то, не нарушая упорядоченности, вставить в нее элемент со значением p, иначе удалить элемент с номером k;
б) подсчитывает количество элементов в двунаправленном списке, у которых равные соседи (первый и последний элементы считать соседями). Используя эту подпрограмму подсчитать количество элементов с равными соседями в заданной последовательности;
в) проверяет, содержит ли кольцевой двусвязный список, упорядоченный подсписок. Упорядоченный подсписок содержит более двух элементов, между которыми выполняется отношение порядка вида “ ”. Используя эту подпрограмму, найти максимальную длину упорядоченного подсписка в заданной последовательности;
г) проверяет, содержит ли кольцевой двунаправленный список упорядоченный (по не убыванию – “ ”) подсписок. Упорядоченный подсписок содержит более двух элементов. Используя эту подпрограмму, найти минимальную длину упорядоченного подсписка в заданной последовательности.
40
