- •1.Принципиальная схема компьютера. Потоки управления и потоки данных.
- •3. Принципы фон Неймана.
- •4. Создание исполняемых программ в машинных кодах, на Ассемблере и на языках высокого уровня.
- •5. Компиляторы и интерпретаторы, их преимущества и недостатки.
- •6. Классификация программных кодов. Схема создания исполняемого кода.
- •8. Определение и свойства алгоритма. Способы записи алгоритмов.
- •9. Блок-схемы. Основные управляющие структуры блок-схем.
- •10. Технологии программирования. Структурное программирование.
- •17. Операторы присваивания, инкремента и декремента. L-value выражения.
- •18. Условный оператор. Оператор запятая.
- •19. Инструкция-выражение. Инструкции выбора if и switch.
- •20. Инструкции передачи управления..
- •22. Алгоритмы обработки числовых данных (алгоритм Евклида, нахождение всех делителей числа, нахождение простых делителей числа, нахождение простых чисел, чисел Фибоначчи).
- •23. Указатели. Типизированные и безтиповые указатели. Операция разыменования и операция получения адреса.
- •25. Арифметические операции над указателями.
- •26. Проблемы и типичные ошибки при работе с указателями.
- •30. Двумерные и многомерные массивы (алгоритмы обработки матриц).
- •31. Многомерные массивы. Реализация многомерных массивов с помощью указателей.
- •32. Динамическое выделение памяти под одномерные и двумерные массивы.
- •34.Передача массивов в качестве параметров.
- •35. Подпрограммы. Определение и объявление подпрограмм. Процедуры и функции.
- •36.Формальные и фактические параметры. Соответствие типов в формальных и фактических параметрах.
- •38. Механизм работы с модифицируемыми параметрами, использующий указатели.
- •40. Использование ссылочного типа при выходе из подпрограмм. Константные ссылки.
- •41. Побочный эффект подпрограмм, его преимущества и недостатки.
- •42. Рекурсия. Формы рекурсивных подпрограмм. Глубина и текущий уровень рекурсии.
- •43. Зацикливание рекурсивных подпрограмм. Примеры неэффективности рекурсии.
- •44. Перегрузка функций. Ошибки, возникающие при перегрузке функций.
- •45.Указатели на функции. Callback-функции.
- •46. Функция main. Передача параметров в функцию main.
- •47. Директивы препроцессора. Директивы #pragma и #include.
- •48. Директивы #define и #undef. Константы времени компиляции.
- •49. Макросы. Преимущества и недостатки использования макросов.
- •50.Директивы условной компиляции. Страж включения.
- •51. Пространства имён. Работа с пространствами имён. Оператор using. Приоритеты и конфликты имён.
- •52. Строки. Операции над строками.
- •54. Строки string. Функции стандартной библиотеки для обработки строк.
- •55. Основные алгоритмы обработки строк (выделение слова, подстроки, разбиение на слова, поиск символа, поиск слова).Ответ в 53.
- •56. Пользовательские типы данных. Перечислимый тип enum.
- •57. Пользовательские типы данных. Тип struct. Массивы структур.
- •58. Объединения (union). Битовые поля.
- •59. Понятие сложности алгоритма. Оценка сложности с использованием о-символики.
- •60. Алгоритмы сортировки и поиска. Обменные сортировки. Сортировки вставками. Сортировки выбором. Сравнительный анализ методов сортировки.
- •61. Последовательный поиск. Бинарный поиск. Сравнительный анализ методов поиска.
- •62. Файлы. Основные принципы работы с файлами. Механизм чтения данных из файла. Определение конца файла. Открытие и закрытие файлов.
- •63. Текстовые файлы. Создание и обработка. Функции ввода/вывода в стиле с. Ввод-вывод нуль-терминированных строк. Посимвольный ввод-вывод. Форматированный ввод-вывод.
- •66. Исключительные ситуации. Системные и пользовательские исключения. Оператор try …catch. Виды блоков catch. Выброс исключений. И их обработка. Оператор throw.
- •70. Структура данных очередь. Кольцевая очередь. Реализация очереди с использованием списков.
- •71. Структура данных стек. Реализация стека с использованием массива.
- •72. Структура данных стек. Реализация стека с использованием списков.
- •73. Структуры данных. Списки. Типы списков. Представление этих структур в статической и динамической памяти. Обработка однонаправленных и двунаправленных списков. Сборка мусора.
- •75. Реализация линейного однонаправленного списка с использованием массивов.
- •76. Деревья. Обходы деревьев.
- •77. Бинарные поисковые деревья. Определение, концевой обход бпд.
- •78. Поиск и вставка нового элемента в бпд.
- •79.Удаление элемента из бпд.
- •80. Реализация бпд с использованием динамической памяти.
70. Структура данных очередь. Кольцевая очередь. Реализация очереди с использованием списков.
(не нашел)
71. Структура данных стек. Реализация стека с использованием массива.
Стек - это специальный тип списка, в котором все вставки и удаления выполняются только на одном конце, называемом вершиной (TOP или HEAD). Стеком называется совокупность однотипных элементов, над которой определены две основных операции:
занесение, или заталкивание в стек (push);
извлечение из стека (pop). При этом извлекается тот элемент, который был занесен в стек последним. В соответствии с правилами этой операции стек еще называют структурой типа LIFO (“last in – first out”).
Второй способ организации стека предполагает использование массива, в котором будут храниться элементы стека. Дополнительно (как и в случае реализации списка в виде массива) используется целочисленная переменная – вершина стека. Значение, хранящееся в ней, соответствует либо индексу последнего занесенного в стек элемента, либо индексу первого свободного элемента.
В любом случае при занесении в стек значение вершины увеличивается, а при извлечении из стека – уменьшается (естественно, после проверки на пустоту стека). В дальнейшем будем использовать в качестве значения вершины индекс первого свободного места.
72. Структура данных стек. Реализация стека с использованием списков.
Стек - это специальный тип списка, в котором все вставки и удаления выполняются только на одном конце, называемом вершиной (TOP или HEAD). Стеком называется совокупность однотипных элементов, над которой определены две основных операции:
занесение, или заталкивание в стек (push);
извлечение из стека (pop). При этом извлекается тот элемент, который был занесен в стек последним. В соответствии с правилами этой операции стек еще называют структурой типа LIFO (“last in – first out”).
Первый способ организации основан на организации стека в виде списка, тогда операции push и pop сводятся к вставке элемента в начало списка и удалению первого элемента.
Однако этот способ, несмотря на кажущуюся простоту, обладает существенными недостатками:
требуется дополнительная память на хранение ссылок, хотя их значение изменяется редко;
операции вставки и удаления являются довольно трудоемкими.
73. Структуры данных. Списки. Типы списков. Представление этих структур в статической и динамической памяти. Обработка однонаправленных и двунаправленных списков. Сборка мусора.
Структуры данных можно разделить на простые и сложные.
Простые структуры
состоят из единственного элемента, несущего какую-то смысловую нагрузку. Этот элемент можно представить как совокупность байтов или бит, но каждый отдельно взятый байт или бит нельзя рассматривать в отрыве от других. В языке С++ простым структурам соответствует скалярный тип (целые, вещественные, символьные, булевский).
Сложные структуры
– это набор некоторым образом сгруппированных данных. В С++ сложным структурам соответствует понятие структурированного типа (массив, структура).
Под списками (точнее, под однонаправлен-ными линейными списками) будем понимать связанную структуру данных, каждый элемент которой содержит информацию о последующем элементе списка – т.н. ссылку на последующий элемент. Последний элемент списка содержит пустую ссылку. Именно по значению пустой ссылки можно определить, что текущий элемент списка - последний. Кроме этого, список должен содержать специальные данные – ссылку на первый элемент.
Для физического удаления элемента списка из памяти следует выполнить т.н. процедуру сборки мусора, которая предполагает освобождение неиспользуемых областей памяти. Алгоритмы сборки мусора сильно зависят от физической организации списка.
Реализация списков Наиболее часто используются следующие способы организации списков: - с использованием динамической памяти; - с использованием массивов. Другие виды списков
двунаправленные или двухсвязные списки. Элементы такого списка содержат ссылку не только на последующий, но и на предыдущий элемент. Сам список содержит, кроме того, ссылки на первый и последний элементы.
Такие списки используются, когда надо часто просматривать элементы списка в разных направлениях, например, при скроллинге различных таблиц.
Кроме того, двунаправленные списки позволяют восстановить значение одной ссылки при ее случайном разрушении и поэтому считаются более надежными структурами данных;
Кольцевые или циклические списки.
В кольцевых списках последний элемент содержит ссылку на первый. В них теряется смысл понятий “первого” и “последнего” элементов списка, вместо этого уместнее говорить о “текущем” элементе. Для таких списков удобной является операция перемещения текущего элемента вперед (а в случае двунаправленных списков – и назад).
74. Списки. Структура линейного однонаправленного списка. Реализация списка с использованием динамической памяти. Реализация вставки в список нового элемента и удаления элемента из списка.Реализация списков Наиболее часто используются следующие способы организации списков:- с использованием динамической памяти; - с использованием массивов.Первый способ предполагает, что для каждого нового элемента списка выделяется участок динамической памяти.После удаления элемента из списка можно освободить занятую этим элементом память, освобождая себя от дополнительных хлопот по сборке мусора. 1. Добавление нового элемента в список
А) в начало спискаListItem* P = new ListItem;
//заполнение поля P->Info P->Next = First; First = P;Алгоритм:
1. Создать новый элемент типа список5. Инициализировать его информационное поле. 6. Его ссылке присвоить значение из указателя на начало списка. 8. Изменить указатель на начало списка, занести в него адрес вставленного элемента. B) После элемента, адрес которого находится в указателе Q
ListItem* P = new ListItem;//заполнение поля P->Info P->Next = Q->Next;Q->Next = P;
Алгоритм:1. Создать новый элемент типа список 5. Инициализировать его информационное поле.6. Его ссылке присвоить значение из элемента списка, адрес которого находится в указателе Q. 8. Изменить ссылку в элементе, адрес которого находится в указателе Q, занести туда адрес вставленного элемента.
2. Удаление элемента из списка А) из начала списка
if (First == NULL) throw ”List is already empty!”;ListItem* P = First;
First = First->Next;delete P;
B) После элемента, адрес которого находится в указателе Q
ListItem* P = Q->Next;if (P == NULL) throw ”Nothing to delete!”;
Q->Next = P->Next;delete P;
При удалении всего списка необходимо вначале уничтожить каждый элемент списка, а уже затем очищать значение указателя First. Заметим, что перед удалением элемента списка ссылка на него должна быть скопирована!
Описание списка (реализация через динамическую память) struct ListItem {
int Info; ListItem* Next;};ListItem* First;
Теперь для задания пустого списка достаточно написать:First = NULL;