Как создать массив структур в си
Из структур можно создавать массивы также, как массивы других типов. И все форматы определения массива структур будут аналогичны определению массивов других типов:
struct person people[10];
В данном случае определен массив структур person из 10 элементов.
Используем массив структур в программе:
#include struct person < int age; char name[20]; >; int main(void) < struct person people[] = < , , , >; int n = sizeof(people)/sizeof(people[0]); for(int i=0; i return 0; >
В массиве people определено 4 объекта person. При инициализации данные каждой отдельной структуры заключаются во вложенные фигурные скобки:
Обращение к элементам массива структур происходит по индексу people[0] . А чтобы обратиться к элементу структуры из массива, после индекса указывается имя элемента структуры: people[i].name
Консольный вывод программы:
Name: Tom Age: 23 Name: Bob Age: 32 Name: Alice Age: 26 Name: Sam Age: 41
И также как с массивами других типов с массивами структур можно использовать указатели:
#include struct person < int age; char name[20]; >; int main(void) < struct person people[] = < , , , >; int n = sizeof(people)/sizeof(people[0]); for(struct person *p=people; p < people+n; p++) < printf("Name:%s \t Age: %d \n", p->name, p->age); > return 0; >
Здесь в массиве people те же 4 элемента person. Для их просмотра создан указатель *p, который устанавливается на начало массива people. И в цикле получаем элементы структур через этот указатель. После завершения каждой итерации указатель увеличивается на единицу, то есть перемещается в памяти на количество байт, которые занимает одна структура. И эти действия продолжаются пока указатель не дойдет до конца массива, который можно получить через выражение people+n.
Массивы структур
Возможно, наиболее часто структуры используются в виде массивов структур. Для объявления массива структур следует сначала определить структуру, а затем объявить массив переменных данного типа. Например, для объявления 100-элементного массива структур типа addr следует написать:
struct addr addr_info[100];
В результате получаем набор из 100 переменных, устроенных, как объявлено в типе структуры addr.
Для доступа к отдельным структурам массива adar_info следует проиндексировать имя массива. Например, для вывода содержимого поля zip третьей структуры, следует написать:
Как и массивы переменных, массивы структур индексируются с нуля.
Массивы структур
Возможно, наиболее часто структуры используются в виде массивов структур. Для объявления массива структур следует сначала определить структуру, а затем объявить массив переменных данного типа. Например, для объявления 100-элементного массива структур типа addr следует написать:
struct addr addr_info[100];
В результате получаем набор из 100 переменных, устроенных, как объявлено в типе структуры addr.
Для доступа к отдельным структурам массива adar_info следует проиндексировать имя массива. Например, для вывода содержимого поля zip третьей структуры, следует написать:
Как и массивы переменных, массивы структур индексируются с нуля.
Создание массива структур
А вот второе я не очень понял. » Создать структуру (struct) Стек / Очередь, она будет включать в себя массив структур с данными и реализовать основные функции стека/очереди(pop,push,empty,size). ! реализовать стек / очередь на основе статического массива. Я не понимаю, что значит «она будет включать в себя массив структур с данными». Буду очень благодарен, если кто-то сможет объяснить или наведёт пример.
Отслеживать
user361068
задан 7 дек 2020 в 19:25
ladislaus01231 ladislaus01231
15 1 1 серебряный знак 6 6 бронзовых знаков
Так нужен С или С++?
– user361068
7 дек 2020 в 19:35
Желательно си, так как, насколько я знаю, в с++ немного по-другому.
7 дек 2020 в 19:39
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
Это значит, что Вам нужно создать ещё одну структуру, которая будет хранить в себе массив элементов типа docEdit . Ну и функции для работы с этой структурой. Вот заготовка для стека:
#include #define MAX_STACK_SIZE 64 #define TEXT_SIZE 20 struct docEdit < char text[TEXT_SIZE]; int StrNum; >; struct Stack < docEdit items[MAX_STACK_SIZE]; int top; // Индекс свободной вершины стека >; // Функция инициализации стека void StackInit(struct Stack* st); // Функция добавления элемента в стек void StackPush(struct Stack* st, struct docEdit de); // Функция извлечения из стека void StackPop(struct Stack* st); // Функция проверки на пустоту стека int StackIsEmpty(struct Stack* st); // Функция проверки на максимальную заполненность стека int StackIsFull(struct Stack* st); // Функция, которая возвращает количество элементов в стеке int StackSize(struct Stack* st); // Функция, которая возвращает указатель на элемент вершины стека для доступа к нему docEdit* StackTop(struct Stack* st);
Реализацию функций оставляю на Вас:)