Слайд 2Линейный список в виде одномерного массива

Слайд 3Линейный список
в динамической памяти

Слайд 5Статические и динамические переменные

Слайд 6Функции для динамического распределения памяти
void *malloc(size_t size);
void *free(void *p);
char *c;
// Выделить память

10 байт
c=(char *)malloc(10);
// или
c=(char *)malloc(sizeof(char)*10);
Слайд 7Использование функций malloc() и free()

Слайд 8Пример 1. Создание массива
в динамической памяти
int *p, i;
p =

(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Общее представление о списке в динамической памяти

Слайд 10Описание типа для построения линейного списка

Слайд 11Создание элементов в динамической памяти
struct element *nach, *pred, *tek;
nach=(struct element *)malloc(sizeof(struct element));

Слайд 12Обращение к полям структуры через указатель (в статической памяти)
struct date {
int

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
//

структуры через указатель
Слайд 14Переприсваивание указателей
pred=tek; // pred и tek указывают на
// один

и тот же элемент
Слайд 15Алгоритм построения списка в прямом порядке

Слайд 16Продолжение. Алгоритм построения списка
в прямом порядке

Слайд 17Глобальные описания
struct element
{
int d;
struct element *link;
};
struct element

*nach; // Указатель на
// начало списка
Слайд 20Пример 2. Функция просмотра списка:
void prosmotr()
{
struct element *tek;
tek

= nach; // Встали на начало списка
while(tek != NULL) // Пока не конец списка
{
printf("%d", tek->d);
tek = tek->link; // Шаг по связи
}
}
Слайд 21Добавление элемента в начало списка
1. Создать новый элемент nov.
Ввести информационную часть nov->d.
2. Построить

связь:
nov->link=nach;
3. Новый элемент сделать начальным:
nach=nov;
Слайд 22Добавление элемента в середину списка
1. Заполнить связь 2 у элемента nov:
nov->link=tek->link;
2. Соединить tek и nov (связь 1):
tek->link=nov;

Слайд 23Добавление элемента в конец списка
1. pred->link=NULL;
2. free(pos);

Слайд 24Пример 3. Перемещение по списку
Фрагмент программы:
tek=nach;
while(tek->d != 'c')
tek=tek->link;
printf("%s",

tek->d);
Слайд 25Пример 4. Перемещение по списку
Что будет выведено на экран в результате выполнения

фрагмента программы:
tek=nach;
for(i=1; i<=4; i++)
tek=tek->link;
printf("%s", tek->d);