Линейный список в динамической памяти. Структура памяти языка Си

Содержание

Слайд 2

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

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

Слайд 3

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

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

Слайд 4

Структура памяти языка Си

Структура памяти языка Си

Слайд 5

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

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

Слайд 6

Функции для динамического распределения памяти

void *malloc(size_t size);
void *free(void *p);
char *c;
// Выделить память

Функции для динамического распределения памяти void *malloc(size_t size); void *free(void *p); char
10 байт
c=(char *)malloc(10);
// или
c=(char *)malloc(sizeof(char)*10);

Слайд 7

Использование функций malloc() и free()

Использование функций malloc() и free()

Слайд 8

Пример 1. Создание массива в динамической памяти

int *p, i;
p =

Пример 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));

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

Слайд 12

Обращение к полям структуры через указатель (в статической памяти)

 struct date {
int

Обращение к полям структуры через указатель (в статической памяти) struct date {
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 // структуры через указатель
структуры через указатель

Слайд 14

Переприсваивание указателей

pred=tek;  // pred и tek указывают на
// один

Переприсваивание указателей pred=tek; // pred и tek указывают на // один и тот же элемент
и тот же элемент

Слайд 15

Алгоритм построения списка в прямом порядке

Алгоритм построения списка в прямом порядке

Слайд 16

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

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

Слайд 17

Глобальные описания

struct element    {      int d;      struct element *link;    }; struct element

Глобальные описания struct element { int d; struct element *link; }; struct
*nach; // Указатель на
// начало списка

Слайд 18

Шаг по связи

 tek = tek->link;

Шаг по связи tek = tek->link;

Слайд 19

Просмотр списка

Просмотр списка

Слайд 20

Пример 2. Функция просмотра списка:

void prosmotr()
{
  struct element *tek;
  tek

Пример 2. Функция просмотра списка: void prosmotr() { struct element *tek; tek
= nach; // Встали на начало списка
  while(tek != NULL)  // Пока не конец списка
  {
    printf("%d", tek->d);
    tek = tek->link; // Шаг по связи
   }
}

Слайд 21

Добавление элемента в начало списка

 1. Создать новый элемент nov.  Ввести информационную часть nov->d. 2. Построить

Добавление элемента в начало списка 1. Создать новый элемент nov. Ввести информационную
связь: 
nov->link=nach; 3. Новый элемент сделать начальным: 
nach=nov;

Слайд 22

Добавление элемента в середину списка

1. Заполнить связь 2 у элемента nov:    nov->link=tek->link; 2. Соединить tek и nov (связь 1):    tek->link=nov;

Добавление элемента в середину списка 1. Заполнить связь 2 у элемента nov:

Слайд 23

Добавление элемента в конец списка

1. pred->link=NULL;
2. free(pos);

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

Слайд 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);
tek->d);

Слайд 25

Пример 4. Перемещение по списку

Что будет выведено на экран в результате выполнения

Пример 4. Перемещение по списку Что будет выведено на экран в результате
фрагмента программы: tek=nach; for(i=1; i<=4; i++)    tek=tek->link; printf("%s", tek->d);
Имя файла: Линейный-список-в-динамической-памяти.-Структура-памяти-языка-Си.pptx
Количество просмотров: 36
Количество скачиваний: 0