- •2. Структуры данных. Элементарные данные.
- •3. Линейные структуры данных. Массив.
- •4. Линейные структуры данных. Запись.
- •5. Линейные структуры данных. Множество.
- •6. Линейный однонаправленный список. Способы реализации и основные операции.
- •7. Линейный двунаправленный список. Способы реализации и основные операции.
- •8. Циклический однонаправленный список. Способы реализации и основные операции.
- •9. Циклический двунаправленный список. Способы реализации и основные операции.
- •10. Стек. Способы реализации и основные операции.
- •11. Очередь. Способы реализации и основные операции.
- •12. Дек. Способы реализации и основные операции.
- •13. Мультисписки. Способы реализации и основные операции.
- •14. Слоёные списки. Способы реализации и основные операции.
- •15. Графы. Способы реализации и основные операции.
- •16. Общие сведения о деревьях. Двоичные деревья. Основные определения и способы реализации.
- •17. Обходы деревьев.
- •18. Организация файлов. Общие сведения.
- •21. Методы разработки алгоритмов
- •22. Алгоритмы поиска в линейных структурах. Последовательный (линейный) поиск
- •23. Алгоритмы поиска в линейных структурах. Бинарный поиск
- •24. Хеширование данных. Функция хеширования
- •25. Хеширование данных. Открытое хеширование
- •26. Хеширование данных. Закрытое хеширование
- •27. Поиск данных по вторичным ключам
- •28. Упорядоченные деревья поиска. Способы реализации и основные операции
- •29. Случайные деревья поиска и оптимальные деревья поиска. Основные понятия
- •31. Поиск в тексте. Прямой поиск
- •32. Поиск в тексте. Алгоритм Кнута, Мориса и Пратта
- •33. Поиск в тексте. Алгоритм Боуера и Мура
- •34. Общие сведения об алгоритмах кодирования (сжатия) данных. Метод Хаффмана
- •35. Алгоритм внутренней сортировки подсчетом
- •36. Алгоритм внутренней сортировки простым включением
- •37. Алгоритм внутренней сортировки простым извлечением
- •38. Алгоритм внутренней сортировки методом пузырька
- •39. Алгоритм внутренней быстрой сортировки (Хоара)
- •40. Алгоритм внутренней сортировки слиянием
- •41. Алгоритм внутренней сортировки распределением
- •42. Алгоритмы внешней сортировки
- •43. Алгоритм определения циклов в графе
- •45. Алгоритмы обхода графа. Поиск в ширину (Волновой алгоритм)
- •46. Алгоритмы нахождения кратчайшего пути в графе. Алгоритм Дейкстры
- •47. Алгоритмы нахождения кратчайшего пути в графе. Алгоритм Флойда
- •49. Алгоритмы нахождения минимального остовного дерева графа. Алгоритм Крускала
7. Линейный двунаправленный список. Способы реализации и основные операции.
В этом линейном списке любой элемент имеет два указателя, один из которых указывает на следующий элемент в списке или является пустым, а второй на предыдущий элемент или является пустым.
Основные операции:
вставка элемента
просмотр
поиск
удаление элемента
Нет необходимости обеспечивать позиционирования какого-либо указателя на первый элемент, так как благодаря двум указателям можно получить доступ к любому элементу списка из любого элемента. Однако часто бывает полезно иметь указатель на заголовок списка.
Скорость работы со списком быстрее, чем с однонаправленным. Но памяти используется больше. Усложнились операции вставки и удаления элементов.
8. Циклический однонаправленный список. Способы реализации и основные операции.
Циклический однонаправленный список похож на линейный однонаправленный, но его последний элемент содержит указатель, связывающий его с первым элементом.
Для полного обхода такого списка достаточно иметь указатель на произвольный элемент, а не на первый.
Понятие «первого» элемента здесь достаточно условно и не всегда требуется. Хотя иногда бывает полезно выделить некоторых элемент как «первый» путём установки на него специального указателя. Это требуется, например, для предотвращения «зацикливания» при просмотре списка.
Основные операции:
вставка элемента
просмотр
поиск
удаление элемента
9. Циклический двунаправленный список. Способы реализации и основные операции.
В этом циклическом списке любой элемент имеет два указателя, один из которых указывает на следующий элемент в списке или является пустым, а второй на предыдущий элемент.
Основные операции:
вставка элемента
просмотр
поиск
удаление элемента
Операции вставки и удаления элементов здесь проще, чем в линейном двунаправленном списке, но сложнее, чем в циклическом однонаправленном списке.
10. Стек. Способы реализации и основные операции.
Стек – это структура данных, в которой новый элемент всегда записывается в её начало (вершину) и очередной читаемый элемент также всегда выбирается из её начала. Здесь используется принцип «последним вошёл – первым вышел» (LIFO).
Стек можно реализовывать как статическую структуру данных в виде одномерного массива, а можно как динамическую – в виде линейного списка.
При реализации стека в виде статического массива необходима резервировать массив, длина которого равна максимально возможной глубине стека, что приводит к неэффективному использованию памяти. Однако работать с такой реализацией проще и быстрее.
При такой реализации дно стека будет располагаться в первом элементе массива, а рост стека будет осуществляться в сторону увеличения индексов. Одновременно необходимо хранить значение индекса элемента массива, являющегося вершиной стека.
Можно обойтись без отдельного хранения индекса, если в качестве вершины стека всегда использовать первый элемент массива, но в этом случае, при записи или чтении из стека, необходимо будет осуществлять сдвиг всех остальных элементов, что приводит к дополнительным затратам вычислительных ресурсов.
Стек как динамическую структуру данных легко организовать на основе линейного списка. Поскольку работа всегда идёт с заголовком стека, т.е. не требуется осуществлять просмотр элементов, удаление и вставку элементов в середину или конец списка, то достаточно использовать экономичный по памяти линейный однонаправленный список. Для такого списка достаточно хранить указатель вершины стека, который указывает на первый элемент списка. Если стек пуст, то списка не существует и указатель принимает значение NULL.
Поскольку стек, по своей сути, является структурой с изменяемым количеством элементов, то основное внимание уделим динамической реализации стека.
Основные операции:
- записать (положить в стек)
- прочитать (снять со стека)
- очистить стек
- проверка пустоты стека
(стакан)
