- •Ссылочный тип данных. Определение, отличия от переменной-указателя. Передача параметра в функцию по ссылке.
- •Псевдокод. Определение, примеры хорошего и плохого псевдокода.
- •Бинарные файлы. Преимущества и недостатки использования бинарных файлов, функции для записи и чтения бинарных файлов в языке c.
- •Бинарные файлы. Запись массивов и структур в бинарные файлы. Примеры.
- •Файловая система. Путь до файла. Маска файлов. Атрибуты файлов.
- •Связные списки. Понятие контейнера, определение и классификация связных списков. Преимущества связных списков перед массивами.
- •Связные списки. Добавление элемента в начало, в конец, в произвольную позицию списка. Сравнение с добавлением в массив. Примеры.
- •Связные списки. Удаление элемента из списка. Сравнение с удалением из массива. Примеры.
- •Связные списки. Обход списка. Сортировка списка. Примеры.
- •Основы ооп. Различия функциональной и объектной декомпозиции. Мотивация введения ооп. Понятия класса и объекта.
- •Основы ооп. Конструкторы и деструкторы. Определения, примеры реализации. Перегрузка конструкторов.
- •Основы ооп. Решение задачи создания списочной структуры средствами ооп (задача о списке студентов).
- •Библиотека mfc. Отличия создания программы под Windows с графическим интерфейсом от консольного приложения. Понятия окна и сообщения.
- •Библиотека mfc. Этапы работы программы под mfc. Понятие компонента. Основные компоненты mfc.
Связные списки. Понятие контейнера, определение и классификация связных списков. Преимущества связных списков перед массивами.
Контейнер в информатике: Программный объект, содержащий в себе тем или иным образом набор значений (объектов) одного или различных типов, и позволяющий обращаться к этим значениям. • Массив • Многомерный массив • Список • Стек • Очередь • И т.д.
Свя́зный спи́сок: Структура данных, состоящая из узлов, каждый из которых содержит как собственные данные, так и одну или две ссылки («связки») на следующие и/или предыдущие узлы. По количеству связей списки разделяют на односвязные и двусвязные.
Преимущества перед массивом - Гибкость: порядок элементов связного списка может не совпадать с порядком расположения элементов данных в памяти компьютера, а порядок обхода списка всегда явно задаётся его внутренними связями.
Пример двусвязного списка:
Struct books
{
Int nomer;
string name;
string author;
int page;
int cost;
books* next; //Указатель на следующий
books* back; //Указатель на предыдущий
};
Примеродносвязногосписка:
Struct books
{
Int nomer;
string name;
string author;
int page;
int cost;
books* next; //Указатель на следующий
};
Связные списки. Добавление элемента в начало, в конец, в произвольную позицию списка. Сравнение с добавлением в массив. Примеры.
Добавление элемента в конец списка:
struct books
{
//… books* next;
}; books* end(books* book) //Поиск конца списка
{
while (book->next != NULL) //пока есть элементы
book = book->next; //переходим к следующему элементу
return book;
} int _tmain(int argc, _TCHAR* argv[])
{ books* start = NULL;//Указатель на первый элемент
books* current = NULL;//Указатель на текущий элемент
if (start == NULL)
{
current = new books;
start = current;
current->next = NULL;
}
else
{
current = end(start);
current->next = new books;
current = current->next;
current->next = NULL;
} //… return 0;
}
Добавление элемента в начало списка:
//… books* tmp = NULL; //Указатель на временный элемент
if (start == NULL)
{//… }
else
{
tmp = new books;
tmp->next = start;
start = tmp;
} //… return 0;
}
Добавление элемента в произвольную позицию списка:
books* add_rand(books* leftbook, books* newbook) // leftbook - Послекотороговставляем
{ // newbook - Новыйэлемент
if (leftbook != NULL)
{
newbook->next = leftbook->next;
leftbook->next = newbook;
}
returnnewbook;
}
Для вставки элемента в массив нужно:Взять исходный массив;Выделить память под новый массив достаточного размера;Скопировать элементы старого массива в новый;Освободить память занимаемую старым массивом;Присвоить указателю на старый массив, указатель на новый.
Время выполнения операции вставки элемента в произвольную позицию массива и время удаления элемента из произвольной позиции линейно зависит от количества элементов массива. O(n).
Время выполнения операции вставки элемента в произвольную позицию списка и время удаления элемента из произвольной позиции постоянно (т.е. не зависит от количества элементов списка). O(1)
