Слайд 2Линейный список в виде одномерного массива
![Линейный список в виде одномерного массива](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1044672/slide-1.jpg)
Слайд 3Линейный список
в динамической памяти
![Линейный список в динамической памяти](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1044672/slide-2.jpg)
Слайд 5Статические и динамические переменные
![Статические и динамические переменные](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1044672/slide-4.jpg)
Слайд 6Функции для динамического распределения памяти
void *malloc(size_t size);
void *free(void *p);
char *c;
// Выделить память
![Функции для динамического распределения памяти void *malloc(size_t size); void *free(void *p); char](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1044672/slide-5.jpg)
10 байт
c=(char *)malloc(10);
// или
c=(char *)malloc(sizeof(char)*10);
Слайд 7Использование функций malloc() и free()
![Использование функций malloc() и free()](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1044672/slide-6.jpg)
Слайд 8Пример 1. Создание массива
в динамической памяти
int *p, i;
p =
![Пример 1. Создание массива в динамической памяти int *p, i; p =](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1044672/slide-7.jpg)
(int *) malloc(100 * sizeof(int));
if (p==NULL)
{
printf("Недостаточно памяти\n");
return 0;
}
for (i = 0; i < 100; i++)
*(p+i) = i;
for (i = 0; i < 100; i++)
printf("%d ", p[i] );
free(p);
Слайд 9Общее представление о списке в динамической памяти
![Общее представление о списке в динамической памяти](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1044672/slide-8.jpg)
Слайд 10Описание типа для построения линейного списка
![Описание типа для построения линейного списка](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1044672/slide-9.jpg)
Слайд 11Создание элементов в динамической памяти
struct element *nach, *pred, *tek;
nach=(struct element *)malloc(sizeof(struct element));
![Создание элементов в динамической памяти struct element *nach, *pred, *tek; nach=(struct element *)malloc(sizeof(struct element));](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1044672/slide-10.jpg)
Слайд 12Обращение к полям структуры через указатель (в статической памяти)
struct date {
int
![Обращение к полям структуры через указатель (в статической памяти) struct date {](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1044672/slide-11.jpg)
day;
char month[10];
int уear; };
struct date this_day, *db;
db = &this_day;
. . .
(*db).day = 25;
db -> day = 25;
Слайд 13Связывание элементов
pred -> link=tek; // обращение к полю link
//
![Связывание элементов pred -> link=tek; // обращение к полю link // структуры через указатель](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1044672/slide-12.jpg)
структуры через указатель
Слайд 14Переприсваивание указателей
pred=tek; // pred и tek указывают на
// один
![Переприсваивание указателей pred=tek; // pred и tek указывают на // один и тот же элемент](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1044672/slide-13.jpg)
и тот же элемент
Слайд 15Алгоритм построения списка в прямом порядке
![Алгоритм построения списка в прямом порядке](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1044672/slide-14.jpg)
Слайд 16Продолжение. Алгоритм построения списка
в прямом порядке
![Продолжение. Алгоритм построения списка в прямом порядке](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1044672/slide-15.jpg)
Слайд 17Глобальные описания
struct element
{
int d;
struct element *link;
};
struct element
![Глобальные описания struct element { int d; struct element *link; }; struct](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1044672/slide-16.jpg)
*nach; // Указатель на
// начало списка
Слайд 20Пример 2. Функция просмотра списка:
void prosmotr()
{
struct element *tek;
tek
![Пример 2. Функция просмотра списка: void prosmotr() { struct element *tek; tek](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1044672/slide-19.jpg)
= nach; // Встали на начало списка
while(tek != NULL) // Пока не конец списка
{
printf("%d", tek->d);
tek = tek->link; // Шаг по связи
}
}
Слайд 21Добавление элемента в начало списка
1. Создать новый элемент nov.
Ввести информационную часть nov->d.
2. Построить
![Добавление элемента в начало списка 1. Создать новый элемент nov. Ввести информационную](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1044672/slide-20.jpg)
связь:
nov->link=nach;
3. Новый элемент сделать начальным:
nach=nov;
Слайд 22Добавление элемента в середину списка
1. Заполнить связь 2 у элемента nov:
nov->link=tek->link;
2. Соединить tek и nov (связь 1):
tek->link=nov;
![Добавление элемента в середину списка 1. Заполнить связь 2 у элемента nov:](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1044672/slide-21.jpg)
Слайд 23Добавление элемента в конец списка
1. pred->link=NULL;
2. free(pos);
![Добавление элемента в конец списка 1. pred->link=NULL; 2. free(pos);](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1044672/slide-22.jpg)
Слайд 24Пример 3. Перемещение по списку
Фрагмент программы:
tek=nach;
while(tek->d != 'c')
tek=tek->link;
printf("%s",
![Пример 3. Перемещение по списку Фрагмент программы: tek=nach; while(tek->d != 'c') tek=tek->link; printf("%s", tek->d);](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1044672/slide-23.jpg)
tek->d);
Слайд 25Пример 4. Перемещение по списку
Что будет выведено на экран в результате выполнения
![Пример 4. Перемещение по списку Что будет выведено на экран в результате](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1044672/slide-24.jpg)
фрагмента программы:
tek=nach;
for(i=1; i<=4; i++)
tek=tek->link;
printf("%s", tek->d);