- •Содержание
- •1 Списковые структуры и динамическая память 10
- •2 Списковые структуры и файлы 79
- •3 Мультисписковые структуры 121
- •4 Указатели на функции 134
- •5 Совместное использование указателей на данные и указателей на функции 141
- •6 Оформление курсового проекта 157
- •Введение
- •1Списковые структуры и динамическая память
- •1.1Представления однонаправленных списков массивами указателей на элементы списка
- •1.1.1Представление однонаправленных списков массивами указателей
- •1.1.2Статические массивы указателей
- •1.1.3Операции со списками в статических массивах указателей
- •1.1.4Статические массивы указателей в динамической памяти
- •1.1.5Операции со списками в статических массивах указателей в динамической памяти
- •1.1.6Динамические массивы указателей
- •1.1.7Динамические массивы типизированных указателей
- •1.1.8Операции со списками в динамических массивах типизированных указателей
- •1.1.9Динамические массивы нетипизированных указателей
- •1.1.10Операции со списками в динамических массивах нетипизированных указателей
- •1.1.11Продолжение. Динамические массивы нетипизированных указателей
- •1.1.12Замечания по оператору &
- •1.1.13Нетипизированые указатели и массивы
- •1.1.14Нетипизированые указатели и память
- •1.1.15Продолжение. Динамические массивы нетипизированных указателей
- •2Списковые структуры и файлы
- •2.1Бестиповые файлы и однонаправленные списки на базе массивов указателей на элементы списка
- •2.1.1Представление однонаправленных списков массивами указателей
- •2.1.2Организация файла с однонаправленным списком на базе массивов указателей на элементы списка
- •2.1.3Статические и динамические массивы указателей
- •2.1.4Организация списка дыр
- •2.1.5Функция инициализации файла со списком
- •2.1.6Функция открытия файла со списком
- •2.1.7Функции корректировки указателя на начало списка, заголовка списка дыр, количества элементов списка и текщего размера массива указателей
- •2.1.8Функция выделения записи для нового элемента списка
- •2.1.9Функция освобождения записи удаляемого элемента списка
- •2.1.10 Функция увеличения размера массива указателей на элементы списка
- •2.1.11 Функция вывода содержимого списка
- •2.1.12 Функция поиска элемента списка
- •2.1.13Функция добавления элемента в неотсортированный список
- •2.1.14Функция добавления элемента в отсортированный список
- •2.1.15Функция удаления элемента из отсортированного списка
- •2.1.16Функция удаления списка
- •2.1.17 Функция удаления списка с усечением файла
- •2.1.18 Пример программы обработки отсортированного списка на базе массивов указателей
- •2.1.19Продолжение. Представление однонаправленных списков массивами указателей
- •2.1.20Функция инициализации файла со списком
- •2.1.21Процедура открытия файла со списком
- •2.1.22Процедура корректировки заголовка списка
- •2.1.23 Процедура увеличения размера массива указателей на элементы списка
- •2.1.24Функция поиска элемента списка или позиции вставки нового элемента методом половинного деления
- •2.1.25Функция вывода списка на экран
- •2.1.26Функция добавления нового элемента в отсортированный список
- •2.1.27Функция удаления элемента из отсортированного списка
- •2.1.28Функция удаления списка с усечением файла
- •3Мультисписковые структуры
- •3.1Назначение мультисписков
- •3.2Мультисписки в динамической памяти
- •3.3Мультисписки в бинарных файлах
- •3.4Сохранение и восстановление мультисписка в динамической памяти
- •4Указатели на функции
- •4.1Понятие указателя на функцию и его объявление
- •4.2Переменная-указатель на функцию как параметр другой функции
- •4.3Условия использования указателей на функции
- •4.4Использование указателей на функцию для вызова функций
- •4.4.1Формат переменных-указателей на функцию и бестиповых указателей
- •4.4.2Преобразование переменной-указателя на функцию к бестиповому указателю на функцию
- •4.4.3Вызов функции через бестиповый указатель на функцию
- •4.4.4Преобразование бестипового указателя к переменной типа указатель на функцию
- •4.5Способы вызова функции через указатель на функцию
- •4.5.1Массивы указателей на функции
- •5Совместное использование указателей на данные и указателей на функции
- •5.1Инвариантные функци
- •5.2Функции сравнения
- •5.3Пример 1
- •5.4Пример 2
- •6Оформление курсового проекта
- •6.1Интерфейс программной системы
- •6.2Взаимодействие с мультисписком
- •6.3Отображение содержимого мультисписка
- •6.4Файл справки
- •6.5Документация по курсовому проекту
- •6.5.1Общие положения
- •6.5.2Курсовой проект/работа
- •6.5.3Пояснительная записка
- •6.5.4Техническое задание
- •6.5.5Реферат
- •6.5.6Содержание
- •6.5.7Введение
- •6.5.8 Постановка задачи
- •6.5.9 Анализ решаемой задачи
- •6.5.10Анализ существующих методов организации динамических структур данных
- •6.5.11 Определение путей и методов решения задачи
- •6.5.12Проектирование программы
- •6.5.13Заключение
- •6.5.14Список использованных источников
- •6.6Приложения
2.1.7Функции корректировки указателя на начало списка, заголовка списка дыр, количества элементов списка и текщего размера массива указателей
Функция корректирует значение указателя начала списка .
void ChangeHeadElmList ( TFile &f, int Start_list) /*Устанавливает новое значение
указателя на начало списка в заголовочной записи файла*/
{
fseek(f, 4, SEEK_SET);
fwrite(&Start_list, sizeof(Start_list), 1, f);
} /*ChangeHeadElmList*/
Функция корректирует запись, содержащую размер массива указателей
void ChangeSizeAr ( TFile &f, int SizeAr) /*Уста-навливает новое значение
размера массива указателей в заголовочной записи файла*/
{
/*корректировка текущего размера массива указателей*/
fseek (f, 8, SEEK_SET); /*позиционирование на поле указателя на
массив указателей*/
fwrite (&SizeAr, sizeof (SizeAr),1, f ); /*занесение нового размера мас-
сива указателей в поле размера массива указателей*/
} /*ChangeSizeAr*/
Функция корректирует запись, содержащую позицию первой дыры
void ChangeHeadHole ( TFile &f, int HeadHole) /*Уста-навливает новое значение
позиции первой дыры в заголовочной записи файла*/
{
/*корректировка заголовка списка дыр*/
fseek (f, 0, SEEK_SET); /*позиционирование на поле, содержащее адрес
первой дыры */
fwrite (&HeadHole, sizeof (HeadHole),1, f ); /*занесение нового значения
заголовка списка дыр*/
} /*ChangeHeadHole*/
Функция корректирует запись, содержащую реальное количество элементов массива указателей.
void ChangeCntElmList ( TFile &f, int Cnt) /*Устанавливает новое значение
количества элементов списка*/
{
/*корректировка количества элементов списка */
fseek (f, 12, SEEK_SET); /*позиционирование на поле, содержащее
количество элементов списка */
fwrite (&Cnt, sizeof (Cnt), 1, f); /*занесение нового значения количества
элементов списка*/
} /*ChangeCntElmList*/
2.1.8Функция выделения записи для нового элемента списка
Эта функция возвращает номер первого байта записи, выделенный под этот элемент списка.
Функция считывает заголовок списка дыр. Если в этом списке содержится хоть один элемент, то первый из них выделяется для нового элемента списка. В противном случае позиция для размещения нового элемента списка будет в конце файла.
В результате работы функции может измениться заголовок списка дыр, поэтому этот параметр функция получает по ссылке.
int NewElem (TFile &f, int &HeadHole)
/*выделение новой записи под новый элемент списка*/
{
int FPos;
int NextHole; /* адрес следующей дыры*/
if (HeadHole == -2) /*выбор записи в конце файла*/
{
fseek (f, 0, SEEK_END); /*Позиционирование в конец файла*/
}
else /*выбор записи из головы списка дыр*/
{
FPos = HeadHole; /*позиция первой дыры*/
fseek (f, FPos, SEEK_SET);
fread (&NextHole, sizeof(NextHole), 1, f);
/*корректировка указателя начала списка дыр*/
HeadHole = NextHole;
ChangeHeadHole(f, HeadHole);
fseek (f, FPos, SEEK_SET); /*позиционирование на дыру*/
}
return ftell(f); /*возвращаемая позиция нового элемента*/
} /*NewElem*/
2.1.9Функция освобождения записи удаляемого элемента списка
Функция в качестве параметров получает номер записи, освобождаемого элемента списка и адрес первой дыры, который изменится в результате работы этой функции.
Функция заносит освободившуюся запись в начало списка дыр и корректирует значение указателя начала списка в заголовке списка дыр.
void DisposeElList (TFile &f, int PosFreeElm, int &HeadHole) /*пополнение
списка дыр*/
{
/*корректировка заголовка списка "дыр"*/
/*формирование нового заголовка списка дыр*/
ChangeHeadHole(f, PosFreeElm);
/*вставка нового элемента в начало списка "дыр"*/
fseek (f, PosFreeElm, SEEK_SET);
/*Записываем в новую дыру адрес бывшей первой дыры*/
fwrite(&HeadHole, sizeof (HeadHole),1,f);
} /*DisposeElList*/
