Lektsia 2-3


Чтобы посмотреть презентацию с картинками, оформлением и слайдами, скачайте ее файл и откройте в PowerPoint на своем компьютере.
Текстовое содержимое слайдов презентации:

Лекция 2.Структуры Понятие структуры Структура - это набор из одной или более переменных, сгруппированных под одним именем для удобства обработки. - struct - служебное слово, используемое для определения структур;- Тег шаблона структуры - имя, которым обозначают структуры данной конструкции, фактически играет роль типа структуры, хотя понятие тип не используется;- {} - Скобки, ограничивающие перечень полей структуры;- Тип поля и имя поля - стандартное объявление каждого из полей. Объявление структуры Синтаксис объявления структуры: struct student { char name[50]; int order; float average_point; }; student john = {"John", 2, 4.5}; std::cout << "Name: " << john.name << "\n"; std::cout << "Order: " << john.order << "\n"; std::cout << "Average point: " << john.average_point; student john; strcpy(john.name, "John"); john.order = 2; john.average_point = 4.5; std::cout << "Name: " << john.name << "\n"; std::cout << "Order: " << john.order << "\n"; std::cout << "Average point: " << john.average_point; Результат: Объявление структуры struct info { char address[100]; }; struct student { char name[50]; int order; float average_point; info data; }; int main() { student john = {"John", 2, 4.5, "My_street"}; std::cout << "Name: " << john.name << "\n"; std::cout << "Order: " << john.order << "\n"; std::cout << "Average point: " << john.average_point << "\n"; std::cout << "Address: " << john.data.address; } Результат: Вложенность структур Из структур одинакового тега может быть создан массив, точно так же как из данных других типов. student ar[AR_SIZE] = { {"John", 1, 2.5}, {"Bill", 2, 3.5}, {"Chris", 3, 5.0}, {"Bonny", 4, 4.0}, {"Megan", 5, 3.3} }; for (int index = 0; index < AR_SIZE; index++) std::cout << "Name: " << ar[index].name << " Order: " << ar[index].order << " Average: " << ar[index].average_point << "\n"; Результат: Name: John Order: 1 Average: 2.5 Name: Bill Order: 2 Average: 3.5 Name: Chris Order: 3 Average: 5 Name: Bonny Order: 4 Average: 4 Name: Megan Order: 5 Average: 3.3 Массивы структур struct Complex { double re; double im; }; Complex C_add( const Complex& x, const Complex& y ) { Complex t; t.re = x.re + y.re; t.im = x.im + y.im; return t; } Complex operator +( const Complex& x, const Complex& y ) { Complex t; t.re = x.re + y.re; t.im = x.im + y.im; return t; } Перегрузка операторов int main() { Complex u, v; u.re = 2.1; u.im = 3.6; v.re = 6.5; v.im = 7.8; Complex res1 = C_add(u, v); Complex res2 = u + v; std::cout << "Result1 = (" << res1.re << " + " << res1.im << "i)" << "\n"; std::cout << "Result2 = (" << res2.re << " + " << res2.im << "i)"; return 0; } Результат: Перегрузка операторов Списком называется упорядоченное, возможно пустое, множество (набор) элементов (узлов), которые состоят из данных и полей связи между узлами. К спискам применимы ряд операций, например, включения, исключения, копирования, поиска, сортировки. Списковые структуры struct student { char name[50]; int order; float average_point; student *next; }; Списковые структуры 1) Односвязный список состоит из узлов (элементов), которые состоят из поля данных и указателя на следующий узел. 2) Начальный узел называется головой списка. 3) Значение указателя связи последнего узла равно NULL. 4) Полей данных может быть несколько. Линейные односвязные списки Линейные односвязные списки Линейные односвязные списки Линейные односвязные списки Линейные односвязные списки Линейные односвязные списки Элементы списка также располагаются в динамической памяти, но непосредственно не связаны между собой, а вместо этого ссылки на эти элементы группируются в некотором одномерном массиве. Список на базе массива указателей Массив указателей, в свою очередь, может располагаться в статической или динамической памяти. Соответственно, будем различать статические и динамические массивы указателей. В случае использования статических массивов указателей устанавливается ограничение на максимальный размер списка, а в случае использования динамических массивов указателей таких ограничений нет. Список на базе массива указателей int ** pp;pp = new int* [5]; /*эта запись означает – выделить участок динамической памяти для массива из 5 элементов типа указатель нацелое число int* и адрес выделенного участка памятизанести в переменную pp*/ тип элемента массива Объявление и инициализация массива указателей int **pp, *p;pp = new int *[5]; // память под массив указателей из 5 указателей типа int* for (int i=0; i<5; i++){ p = new int; *p = i * 2; pp[i] = p; // можно pp[i]=new int; *pp[i]=i;} for (int i=0; i<5; i++) std::cout << "Value: " << *pp[i] << " Address: " << pp[i] << "\n"; Value: 0 Address: 0x239d0b0 Value: 2 Address: 0x239d0d0 Value: 4 Address: 0x239d0f0 Value: 6 Address: 0x239d110 Value: 8 Address: 0x239d130 Объявление и инициализация массива указателей После выполнения действий, описанных выше, данные в памяти будут расположены следующим образом: Объявление и инициализация массива указателей int *pp[5], *p; for (int i=0; i<5; i++) { p = new int; *p = i; pp[i] = p; } for (int i=0; i<5; i++) std::cout << "Value: " << *pp[i] << " Address: " << pp[i] << "\n"; Value: 0 Address: 0x3d25c10 Value: 1 Address: 0x3d25c30 Value: 2 Address: 0x3d25c50 Value: 3 Address: 0x3d25c70 Value: 4 Address: 0x3d25c90 Объявление и инициализация массива указателей После выполнения действий, описанных выше, данные в памяти будут расположены следующим образом: Объявление и инициализация массива указателей Физическая структура информационной системы

Приложенные файлы

  • ppt 18814028
    Размер файла: 236 kB Загрузок: 0

Добавить комментарий