Структуры данных

Содержание

Слайд 2

Что такое структура?

В языке Си, структура (struct) — композитный тип данных, инкапсулирующий

Что такое структура? В языке Си, структура (struct) — композитный тип данных,
без сокрытия набор значений различных типов. Порядок размещения значений в памяти задаётся при определении типа и сохраняется на протяжении времени жизни объектов, что даёт возможность косвенного доступа (например, через указатели)

Слайд 3

Структура

Имеет фиксированный размер
Тот же набор байт только больше
Создание на стеке
Создание в сегменте

Структура Имеет фиксированный размер Тот же набор байт только больше Создание на
данных
Создание массивов
Создание указателя на структуру
Динамический массив

Слайд 4

Пример использования

Пример использования

Слайд 5

Либо

Либо

Слайд 6

Структура в памяти

Int a;
float b;
double c;

Int

float

double

Сплошная область памяти в 18 байт

Структура в памяти Int a; float b; double c; Int float double

Слайд 7

Размещение структуры

Локально

Глобально

Размещение структуры Локально Глобально

Слайд 8

Первичная инициализация.

Создание экземпляра структуры придерживается тем же правила что и создание переменных:
Глобальные

Первичная инициализация. Создание экземпляра структуры придерживается тем же правила что и создание
объявления зануляются(т.к. выделены в сегменте данных), а значит все переменные внутри так же равняются нулю
При локальном объявлении(в теле функции) память резервируется в стеке а значит поля структуры будут инициализированы мусором.

Слайд 9

Первичная инициализация

При такой инициализации, явно не инициализированные поля
будут приравнены к нулю

Первичная инициализация При такой инициализации, явно не инициализированные поля будут приравнены к нулю

Слайд 10

Практика

Напишем функцию которая распечатает данные структуры Person состоящую из полей: firstName, lastName,

Практика Напишем функцию которая распечатает данные структуры Person состоящую из полей: firstName, lastName, age, sex
age, sex

Слайд 11

#define

Директива #define определяет идентификатор и последовательность символов, которой будет замещаться данный идентификатор

#define Директива #define определяет идентификатор и последовательность символов, которой будет замещаться данный
при его обнаружении в тексте программы. Стандартный вид директивы следующий:
#define имя_макроса последовательность_символов

Слайд 13

typedef

Объявление typedef, которое содержит имя, которое внутри своей области является синонимом для

typedef Объявление typedef, которое содержит имя, которое внутри своей области является синонимом
типа, указанного частью объявления type-declaration.

Слайд 15

Динамическое выделение памяти под структуры

Динамическое выделение памяти под структуры

Слайд 16

Не все так очевидно

Сколько весит структура?

8 байт

8 байт

8 байт

Не все так очевидно Сколько весит структура? 8 байт 8 байт 8 байт

Слайд 17

Выравнивание данных

Смещение данных в структуре до адреса кратного их размеру.

Выравнивание данных Смещение данных в структуре до адреса кратного их размеру.

Слайд 18

Скучный Интересный факт

На процессорах x86 и ARM примитивные типы не могут находиться

Скучный Интересный факт На процессорах x86 и ARM примитивные типы не могут
в произвольной ячейке памяти. Каждый тип, кроме char, требует выравнивания. char может начинаться с любого адреса, однако двухбайтовый short должен начинаться только с четного адреса, четырехбайтный int или float — с адреса, кратного 4, восьмибайтные long или double — с адреса, кратного 8. Наличие или отсутствие знака значения не имеет. Указатели — 32-битные (4 байта) или 64-битные (8 байт) — также выравниваются.

Слайд 19

Пример

Пример

Слайд 20

Можно но не нужно

Можно убрать выравнивание с помощью выражения
#pragma pack(1)

Можно но не нужно Можно убрать выравнивание с помощью выражения #pragma pack(1)

Слайд 21

Оптимизация

Данные отсортированы по объему, от большего к меньшему

Оптимизация Данные отсортированы по объему, от большего к меньшему

Слайд 22

Списки

Структуры не могу содержать в себе другие структуру того же типа, но

Списки Структуры не могу содержать в себе другие структуру того же типа,
могут содержать ссылки на них.

Слайд 23

Списки

Список – цепочка элементов связанных между собой ссылками

Списки Список – цепочка элементов связанных между собой ссылками

Слайд 24

Посмотрим на практике.

Напишем программу в которую можно вводить не *ограниченное кол-во координат

Посмотрим на практике. Напишем программу в которую можно вводить не *ограниченное кол-во
точек, концом ввода будет отрицательное число, после чего программа распечатывает все точки.

Слайд 25

Виды списка

Односвязные – каждый элемент списка имеет ссылку лишь на следующий элемент.
Двусвязные

Виды списка Односвязные – каждый элемент списка имеет ссылку лишь на следующий
– каждый элемент списка имеет ссылку на следующий и предыдущий элементы.
Имя файла: Структуры-данных.pptx
Количество просмотров: 24
Количество скачиваний: 0