Главная страница

презентация по си. Презентация - лекция 3. Лекция 3 Структуры данных. Массивы. Многомерные массивы


Скачать 0.86 Mb.
НазваниеЛекция 3 Структуры данных. Массивы. Многомерные массивы
Анкорпрезентация по си
Дата11.12.2022
Размер0.86 Mb.
Формат файлаppt
Имя файлаПрезентация - лекция 3.ppt
ТипЛекция
#839702

Лекция 3
Структуры данных. Массивы. Многомерные массивы.
Структуры


Динамические и статические структуры данных


Структура данных – это множество элементов данных и множество связей между ними. Она поддерживает определенный порядок доступа к данным. Два основных типа структур данных – динамические, размер которых при исполнении программы может изменяться, и статические, т.е., структуры, размер которых остаётся неизменным с момента начала выполнения вычислений до их завершения.


Динамические структуры данных


Динамические структуры: связанные списки, стеки, очереди и двоичные деревья.
Связанный список Стек Очередь Бинарное дерево


Элемент 2


Элемент 3


Элемент 1


Элемент 4


Вставка


Удаление


Вставка


Удаление


Вставка


Удаление


Элемент 2


Элемент 3


Элемент 1


Элемент 4


Вставка


Удаление


Элемент 2


Элемент 3


Элемент 1


Элемент 4


Вставка


Удаление


Элемент 3


Элемент 1


Элемент 7


Элемент 2


Элемент 5


Элемент 6


Элемент 4


Статические структуры данных: массивы


Массив представляет собой группу ячеек памяти, логически связанных в том отношении, что все они имеют одно и то же имя и один и тот же тип.


При написании программного кода устанавливается тип каждого элемента и число элементов, требуемых для каждого массива. Чтобы зарезервировать память для 12 элементов для целочисленного массива с именем c, необходимо написать:
int c[12];


При помощи одного объявления можно зарезервировать память
для нескольких массивов:
int b[100], x[72];


467


1475


14


765


379


25


6528


147


957


27586


8


45


Статические структуры данных: массивы


Элементы массива также можно инициализировать при объявлении массива:
int n[10] = {32, 27, 64, 18, 95, 14, 90, 70, 60, 37};
Посредством объявления
int n[10] = {0};
инициализируют все элементы массива n нулями.
Если размер массива не указывается в квадратных скобках при его объявлении и инициализации, то число элементов в массиве будет равно числу элементов в списке инициализации. Пример объявления массива из пяти элементов:
int n[] = {1, 2, 3, 4, 5};


Статические структуры данных: массивы


Первый элемент в любом массиве имеет нулевой порядковый номер. Для обращения к конкретной области или элементу массива указывают имя массива и номер позиции этого элемента в массиве. Таким образом, первый элемент массива c обозначают как c[0], второй как c[1], седьмой как c[6] и, в общем случае, i-й элемент как c[i-1].
c[0] c[1] c[2] c[3] c[4] c[5] c[6] c[7] c[8] c[9] c[10]


Индекс элемента массива обязательно должен быть неотрицательным целым числом или целочисленным выражением. Так, если значение переменной a равно 5, а значение переменной b равно 6, то оператор c[a+b] += 2 прибавляет 2 к элементу массива c[11].


435 6279 27


-682 728 953


-140 12


289 5 3587


Статические структуры данных: массивы


Символьные массивы в языке C, как правило, используются для хранения строк. Любой символьный массив может быть инициализирован строковым литералом:
char string1[] = “first”;
Размер массива string1 в объявлении определяется компилятором исходя из длины строки. Данная строка содержит пять символов и специальный символ окончания строки ‘\0’, называемый нулевым символом.


Статические структуры данных: массивы


Другой способ объявления и инициализации символьного массива:
char string1[] = {‘f’, ‘i’, ‘r’, ‘s’, ‘t’, ‘\0’};
К символам строки можно обращаться точно так же, как и в любом массиве: string1[0] – это символ ‘f’, а string1[3] – символ ‘s’.
Строками в языке C могут быть и символьные массивы строго заданного размера. Инструкция
char string2[20];
создаёт массив, в котором может храниться строка из 19 символов и завершающего нулевого символа. Строка может быть введена пользователем с клавиатуры и считана в символьный массив с помощью функции scanf.


Статические структуры данных: массивы


Сортировка массивов
Сортировка данных – одна из важнейших задач в программировании. Широко распространена так называемая пузырьковая сортировка данных в массиве, в процессе которой меньшие значение, подобно пузырькам в воде, постепенно «всплывают» в верхнюю часть массива. Метод требует нескольких проходов по массиву. На каждом проходе сравниваются последовательные пары элементов. Если элементы расположены в убывающем порядке, их значения в массиве меняются местами, а если в возрастающем порядке, то ничего не изменяется.


Статические структуры данных: массивы


Сортировка массивов
Пример пузырьковой сортировки массива:
#include
int main()
{
int a[10] = {2, 6, 4, 8, 10, 12, 89, 68, 45, 37};
int i, pass, hold;
for (pass = 1; pass <= 9; pass++) // проходы
{
for (i = 0; i <= 8; i++) // один проход
{
if (a[i] > a[i+1]) // одно сравнение
{
hold = a[i]; // одна перестановка
//продолжение на следующей странице


Статические структуры данных: массивы


Сортировка массивов
//пузырьковая сортировка массива: начало на предыдущем слайде
a[i] = a[i+1];
a[i+1] = hold;
}
}
}
printf(“Array: ”);
for (i = 0; i <= 9; i++)
{
printf(“%d”, a[i]);
}
return 0;
}


Статические структуры данных: массивы


Массивы в C могут иметь несколько индексов. Многомерные массивы часто применяются, например, для представления таблиц. Здесь пригодны для применения массивы с двумя индексами: первый идентифицирует строку элемента, а второй ‒ столбец.
Приведём пример описания таблицы с помощью двумерного массива a[3][4].
Столбец 0 Столбец 1 Столбец 2 Столбец 3


a[0][0]


a[0][1]


a[0][2]


a[0][3]


a[1][0]


a[1][1]


a[1][2]


a[1][3]


a[2][0]


a[2][1]


a[2][2]


a[2][3]


Строка 0
Строка 1
Строка 2


Статические структуры данных: массивы


Двумерный массив, так же как и одномерный, можно инициализировать при объявлении:
int b[2][2] = {{1, 2}, {3, 4}};
Аналогичным образом можно работать с трёх-, четырёх- и вообще n-мерными массивами. Например, инструкция
int arr[10][20][30];
объявляет трёхмерный массив arr, который по сути является массивом из 10 массивов. Все они содержат по 20 элементов-массивов, каждый из которых, в свою очередь, включает 30 элементов.


Статические структуры данных: массивы


Когда функция принимает в качестве параметра одномерный массив, в списке параметров функции скобки, относящиеся к массиву, остаются незаполненными. Если передаётся многомерный массив, то первый индекс также не указывается, однако все последующие индексы необходимы.
Для передачи массива в качестве аргумента функции необходимо в любом случае указать его имя без скобок.


Статические структуры данных: массивы


#include
void printArray (int [][3]);
int main()
{
int array1 [2][3] = {{1, 2, 3}, {4, 5, 6}};
printf(“Array members: ”);
printArray(array1);
return 0;
}


void printArray(int a[][3])
{
int i, j;
for (i = 0; i <= 1; i++)
{
for (j = 0; j <= 2; j++)
{
printf (“%d”, a[i][j]);
}
}
}


Пример передачи массива в качестве параметра/аргумента в функцию printArray, печатающей значения некоторого двумерного массива:


Статические структуры данных: структуры


Структура – это набор логически связанных переменных, объединённых под одним именем. В отличие от массивов, структуры могут состоять из переменных различных типов данных. Они помогают в организации сложных данных.
Объявление структуры начинается со слова struct и содержит список объявлений в фигурных скобках. За словом struct может следовать имя (тег) структуры. Пример:
struct point {
int x;
int y;
};
Перечисленные в структуре переменные называются её элементами.


Статические структуры данных: структуры


Объявление структуры определяет тип. После закрывающей фигурной скобки могут следовать имена объявленные переменные нового типа:
struct a {…} x, y, z;
либо можно объявить переменную отдельной строкой:
struct point pt;
Структурную переменную можно инициализировать:
struct point maxpt = {320, 200};
Доступ к отдельному элементу структуры осуществляется при помощи оператора . (точки) Для вывода на экран координат точки pt, можно написать
printf(“%d, %d”, pt.x, pt.y);


Статические структуры данных: структуры


Структуры могут быть вложены друг в друга. Одно из возможных представлений прямоугольника – пара точек на углах его диагоналей:
struct rect{
struct point pt1;
struct point pt1;
};
Если объявить новую переменную как
struct rect screen;
то инструкция
screen.pt1.x;
обращается к координате x точки pt1 из screen.


Статические структуры данных: структуры


Единственные возможные операции над структурами – это их осуществление доступа к их элементам, копирование и присваивание (помимо прочего, они подразумевают передачу функциям аргументов и возврат ими значений), а также взятие адреса с помощью &. Структуры в языке C нельзя сравнивать.
Пример функции makepoint, получающей два значения и возвращающей структуру point:
struct point makepoint(int x, int y)
{
struct point temp;
temp.x = x;
temp.у = у;
return temp;
}


Статические структуры данных: структуры


В продолжение примера: функция main, в теле которой вызывается функция makepoint.
int main ()
{
struct rect screen;
struct point middle;
screen.pt1 = makepoint(0, 0);
screen.pt2 = makepoint(1600, 1200);
middle = makepoint((screen.pt1.x + screen. pt2.x)/2, (screen.pt1.y + screen.pt2.y)/2);
}


Статические структуры данных: структуры


Другой пример функции, выполняющей операции над точками:
struct point addpoint(struct point p1, struct point p2)
{
p1.x += p2.x;
p1.y += p2.y;
return p1;
}
Здесь оба параметра и возвращаемые значения – структуры.



написать администратору сайта