Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лекции по проге / 15_Динамические структуры данных

.pdf
Скачиваний:
33
Добавлен:
14.03.2016
Размер:
246.85 Кб
Скачать

Организация ссылочных структур

Контейнеры хранят только ссылки на элементы

Память под элементы выделяется и освобождается вне контейнера

Если элемент хранится в нескольких контейнерах, то все контейнеры содержат указатели на один и тот же элемент

51

Организация ссылочных структур

IVT-160

Иванов

GRANTS

76.9

 

 

 

Петров

 

...

92.7

...

 

 

Сидоров

 

 

25.0

 

IVT-161

Антонов

 

 

 

...

77.2

 

Щукина

 

 

 

52

86.5

 

 

 

Задание

Для групп IVT-160 и IVT-161 составить список GRANTS студентов, получающих стипендию.

Стипендию получают студенты, средний рейтинг которых равен или превышает 76 баллов

53

Организация ссылочных структур

struct TStudent *student;

//

текущий студент

int studentCount;

//

кол-во студентов в группе

const char groups[][15] = {"IVT-160", "IVT-161"}; // группы

int

i;

//

индекс

группы

int

j;

//

индекс

студента в группе

for(i = 0; i < 2; i++)

{// Составляем список стипендиатов для группы studentCount = getCount( groups[i] );

for(j = 0; j < studentCount; j++)

{

student = getStudent( groups[i], j ); if( student->avg_rating >= 76 )

{ addStudent( "GRANTS", student ); }

}

54 }

Задание

Уничтожьте списки студентов IVT-160, IVT-161 и

GRANTS, освободив память

55

Организация ссылочных структур

const char groups[][15] = {"IVT-160", "IVT-161"}; // группы

//Уничтожаем список стипендиатов while( getCount( "GRANTS" ) > 0 ) { removeStudent( "GRANTS" ); }

//Уничтожаем группы студентов вместе со студентами for(int i = 0; i < 2; i++)

{

//Уничтожаем группу студентов

while( getCount( groups[i] ) > 0 )

{ free ( removeStudent( groups[i], 0 ) ); }

56 }

Это надо помнить!

Выделенную память обязательно следует освобождать. Автоматически она не освобождается

Количество вызовов и передаваемые адреса для функции free должны строго соответствовать количеству вызовов и адресам для функций malloc

и calloc

Обращение к невыделенной или уже освобожденной памяти вызовет ошибку (см. памятку по указателям)

57

Это надо помнить!

Если массив (контейнер) хранит значения объектов, то он хранит их копии. Изменение одной копии не оказывает влияния на другие. Копии возникают и уничтожаются вместе с массивом (контейнером)

Если массив (контейнер) хранит указатели на объекты, то он хранит только ссылки на них. Изменение объекта заметно по всем ссылкам на него. Память под объекты выделяется и освобождается отдельно от массива (контейнера)

58