MP_L6.ppt
- Количество слайдов: 32
Методы программирования Хуторова Ольга Германовна Лекция 6
Темы лекции n Пользовательские типы данных в С++ q n Структуры в С++ Структуры данных q Списки n n q Стеки Очереди Деревья
Структуры в С++ struct Person { string First. Name; // Имя string Last. Name; // Фамилия int Birth. Year; // Год рождения }; Person Vasya; Vasya. First. Name="Василий"; Vasya. Last. Name="Пупкин"; Vasya. Birth. Year=1992; cout<
Структуры в С++ n /* complex. h */ struct COMPLEX { double re; double im; }; n или то же самое, но короче /* complex. h */ struct COMPLEX { double re, im; };
Заголовочные файлы n /* complex. h */ struct COMPLEX { double re; double im; }; n или то же самое, но короче /* complex. h */ struct COMPLEX { double re, im; };
Заголовочные файлы #include "complex. h" COMPLEX number 1, number 2; /* два числа */ COMPLEX arr[10]; /* массив */ COMPLEX *ptr; /* указатель */
Работа со полями структуры #include "complex. h" struct COMPLEX number, *ptr; /* - точка */ number. re = 1. 0; number. im = number. re; /* через указатель - стрелочка */ ptr = &number; ptr->re=1. 0; ptr->im=ptr->re; /* Аналогично */ (*ptr). re=1. 0; (*ptr). im=(*ptr). re;
Полями структур могут быть произвольные типы данных struct Point { double x; double y; }; struct Circe { Point Center; double Radius; }; Circle A; A. Radius=10; A. Center. x=-3; A. Center. y=15;
совместить описание типа и создание переменных если структура понадобилась только в одном файле, то можно : struct COMPLEX { double re, im; } number 1, *ptr;
Поле - указатель на эту же структуру /* Структура - элемент односвязного списка */ struct LIST_ELM { char info[100]; /* поле-массив char */ /* Поле-указатель на предыдущий элемент */ LIST_ELM *prev; };
Инициализация struct LIST_ELM first = { "First", NULL } struct LIST_ELM second = { "Second ", &first };
Инициализация struct USELESS { char *p; int a[2]; double d; }; USELESS useless = { NULL, { 1, 2 }, 3. 14 };
Передача в функцию_1 /* Заносим комплексное значение по указанному адресу */ void set_complex(COMPLEX *n, double re, double im) { n->re = re; n->im = im; } /* Складываем два числа, возвращаем результат */ COMPLEX *add_complex(COMPLEX *n 1, COMPLEX *n 2) { static struct COMPLEX result; result. re = n 1 ->re + n 2 ->re; result. im = n 1 ->im + n 2 ->im; return &result; }
Передача в функцию_2 int main() { COMPLEX number 1, number 2, *ptr; set_complex( &number 1, 1. 0); set_complex( &number 2, 1. 0, 0. 0); ptr=add_complex(&number 1, &number 2); cout << ptr->re <<" " << ptr->im; getchar(); return 0; }
Структуры данных - - это связи между данными, которые тем или иным образом выделены как элементы структуры. К структурам данных относятся массивы, множества, стеки, очереди, деки, списки, графы и т. п. При этом элементами структуры, в свою очередь, снова могут быть структуры данных. Обработка данных, организованных к преобразованию элементов этой структуры в соответствии со связями, заданными структурой, а также к (допустимому) изменению самих связей.
Структуры данных n Статические структуры данных q q структурированное множество примитивных, базовых, структур (массив, вектор) память для них выделяется один раз и ее объем остается неизменным до уничтожения структуры
++&-n Достоинства q q n доступ за константное время к любому элементу память тратится только на данные Недостаток: q статичность, неизменность структуры
Структуры данных n Динамические структуры данных q q q характеризуются отсутствием физической смежности элементов структуры в памяти непостоянством и непредсказуемостью размера (числа элементов) структуры в процессе ее обработки. Для установления связи между элементами динамической структуры используются указатели, Элемент динамической структуры состоит из двух полей: n n информационного поля или поля данных, поле связок, в котором содержатся один или несколько указателей, связывающий данный элемент с другими элементами структуры;
++&-n Достоинства q q q n размер структуры ограничивается только доступным объемом машинной памяти; при изменении логической последовательности элементов структуры требуется не перемещение данных в памяти, а только коррекция указателей (сокращение массовых операций); большая гибкость структуры. Недостатки q q на поля связок расходуется дополнительная память; доступ к элементам связной структуры может быть менее эффективным по времени
Cписки n Списком называется упорядоченное множество, состоящее из переменного числа элементов, к которым применимы операции включения, исключения. Список, отражающий отношения соседства между элементами, называется линейным. Длина списка равна числу элементов, содержащихся в списке, список нулевой длины называется пустым списком. Линейные связные списки являются простейшими динамическими структурами данных.
односвязный и двусвязный список
кольцевой двухсвязный список
Cтек n n последовательный список с переменной длиной, включение и исключение элементов из которого выполняются только с одной стороны списка, называемого вершиной стека. магазин и очередь LIFO (Last - In - First- Out - "последним пришел - первым исключается").
Включение и исключение элементов из стека
Очередь FIFO Очередью FIFO (First - In - First- Out - "первым пришел - первым исключается"). называется такой последовательный список с переменной длиной, в котором включение элементов выполняется только с одной стороны списка (эту сторону часто называют концом или хвостом очереди), а исключение - с другой стороны (называемой началом или головой очереди).
Дек n Дек (deq - double ended queue, т. е очередь с двумя концами) - это такой последовательный список, в котором как включение, так и исключение элементов может осуществляться с любого из двух концов списка. Логическая и физическая структуры дека аналогичны логической и физической структуре кольцевой FIFOочереди. Однако, применительно к деку целесообразно говорить не о начале и конце, а о левом и правом конце.
Древовидная структура (Дерево) тип организации, в котором каждый объект связан с хотя бы одним другим n n существует один корень дерева T остальные узлы (за ислючением корня) распределены среди непересекающихся множеств T 1, . . . , Tm, и каждое из множеств является деревом; деревья T 1, . . . , Tm называются поддеревьями данного корня T
Древовидная структура (Дерево) Узел – родитель или потомок n Степень узла — количество поддеревьев узла q q Концевой узел (лист) — узел со степенью нуль. Узел ветвления — неконцевой узел Уровень узла определяется рекурсивным образом: n q q q Уровень корня дерева равен нулю Уровень потомка +1 к уровню родителя ярус — множество узлов дерева, на одном уровне от корня дерева.
Двоичные деревья
Многосвязные структуры
Граф n n Граф — это фигура, которая состоит из вершин и ребер, соединяющих вершины. Ребра могут иметь направления, т. е. изображаться стрелочками; такие графы называются ориентированными. Дерево — это связный граф без циклов. Кроме того, в дереве выделена одна вершина, которая называется корнем дерева.
Список литературы n n Х. Дейтел, П. Дейтел Как программировать на С++ Кнут Д. Искусство программирования для ЭВМ. т. 1. - М. : Мир, 2002. Р. Седжвик Фундаментальные алгоритмы на C++. М. , Изд-во МЭИ, 1997. Википедия http: //ru. wikipedia. org/