Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Otvety_na_infu.docx
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
37.74 Кб
Скачать

28. Связные списки

Связный список состоит из узлов. В каждом узле хранятся некоторые данные и указатель на следующий узел списка . В программе, работающей со списком, обычно есть еще один отдельный указатель, ссылающийся на первый узел списка ("pointer" ). В указатель последнего узла принято записывать значение "NULL". Размер связных списков, в отличие от массивов, можно изменять динамически (во время выполнения программы можно добавлять/удалять отдельные узлы в любом месте списка). Оператор "struct" позволяет создать новый тип данных, в отличие от оператора "typedef", который, по существу, предназначен для присвоения нового имени уже существующему типу данных. Структура – это набор разнотипных переменных (в противоположность массиву, состоящему из элементов одного типа). Для доступа к полям (внутренним переменным) структуры "my_node" надо пользоваться оператором "."

29. Понятие рекурсии, принцип выполнения, примеры

Если в определении функции содержится вызов ее самой, то такая функция называется рекурсивной Для выполнения вызова функции в памяти компьютера выделяется некоторое количество памяти (необходимое для запоминания адреса возврата, для создания копий параметров по значению и для передачи параметров-указателей). Для организации вызовов функций и создания автоматических переменных в программах на Си++ отводится специальная область памяти – стек. Память, необходимая для очередного вызова функции, выделяется в верхней части стека (в старших адресах). При завершении функции размер стека уменьшается на соответствующую величину. Характерная особенность стека – соответствие принципу "последним прибыл – первым обслужен".

30. Сравнения, рекурсивного и циклического выполнения функции

Любую рекурсивную функцию можно реализовать итеративно, т.е. с помощью циклов "for", "while" или "do...while". какое определение функции выбрать (рекурсивное или итерационное) – вопрос пристрастий программиста. Исходный текст рекурсивных функций иногда легче для понимания, но итерационные функции практически всегда работают быстрее. Конечно, вопрос о том, какая реализация конкретной функции более понятна, довольно спорный. Обычно в итерационную функцию приходится включать больше локальных переменных, например, в первом примере был добавлен массив "chars[MAX_ARRAY_LENGTH]", а во втором примере – целочисленная переменная "product". Другими словами, в итеративных функциях память тратится на локальные переменные, а рекурсивных функциях – на организацию вызовов.

31. Назначение, описания инициализация составных типов данных

Структура – это составной тип данных, который получается путем объединения компонент, принадлежащих к другим типам данных (возможно, тоже составным). Структура предназначена для объединения нескольких переменных в один тип данных. Сначала тип структуры надо описать, а затем можно создавать переменные этого нового типа. Описание типа структуры "T" имеет следующий синтаксис: struct T { T1 var1; T2 var2; }; точка после фигурной-обязательно. Для выбора компонент внутри "s1" или "s2" применяется операция "."

32. Способы доступа к компонентам структуры данных

для доступа к компонентам структуры через указатель применяется операция "->"

void print_person( Person* p ) { cout << p->name << '\n';}  void print_person( Person* p ) { cout << (*p).name << '\n';}Обратите внимание на скобки в записи "(*p).", которые необходимы, поскольку приоритет операции "." выше, чем у "*":

33. Описание и использование массивов структур данных

У массива и структуры есть общее свойство: оба этих типа данных являются типами с произвольным доступом. Но структура более универсальна, поскольку не требуется, чтобы типы всех ее компонент были одинаковы. С другой стороны, в некоторых случаях массив предоставляет бóльшие возможности, т.к. индексы его элементов могут вычисляться, а имена компонент структуры – это фиксированные идентификаторы, задаваемые в описании типа. Массивы и структуры могут комбинироваться различными способами. Например, i-я компонента массива "a", который является компонентой структуры "r", обозначается как r.a[i] Напротив, компонента с именем "s", входящая в i-ю компоненту-структуру массива структур "a" обозначается как a[i].s

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]