Successfully reported this slideshow.
ОСНОВЫ ПРОГРАММНОГО  КОНСТРУИРОВАНИЯ                  Лекция № 5              19 марта 2013 г.
СОСТАВНЫЕ ТИПЫ ДАННЫХ
ЗАПИСИ• Объединяют  разнотипные данные, относящиеся к одному объекту из предметной области.    struct Point {          str...
МАССИВЫ• Множество   однотипных данных: • Набор   временных отсчетов. • Векторы   и матрицы. • Набор   строк.• Элементы   ...
ОДНОМЕРНЫЙ МАССИВ• A0   – адрес начала массива.•s   – размер элемента массива.• Чему   равен A(n) – адрес n-го элемента ма...
ОДНОМЕРНЫЙ МАССИВ A(n) = A0 + n⋅s
ДВУМЕРНЫЙ МАССИВ                   int a[2][3];     С-style           или        FORTRAN-style          k                 ...
N-МЕРНЫЙ МАССИВ•K   размерностей: A[NK][NK-1]....[N1].• А(nK, nK-1, …, n1)   = A0 + s⋅n(nK, nK-1, …, n1).• n(nK, nK-1, …, ...
C-STYLE• Уменьшаем порядок задачи на единицу (K → K−1), «откусывая» последнюю размерность: • n(nK, nK−1, …, n1)   = n(nK, ...
FORTRAN-STYLE• «Откусываем»    первую размерность: • n(nK, nK−1, …, n1)   = n(0, nK−1, …, n1) + nK • n(0, nK−1, …, n1)   =...
ДВА СПОСОБА СМОТРЕТЬ      НА ДАННЫЕ «Белый ящик»     «Черный ящик»   (прозрачный)     (непрозрачный)  Устройство        Оп...
ОПЕРАЦИИ НАД ДАННЫМИ•   Записи:                           •   Массив:    •   Прочитать элемент по имени.       •   Прочита...
«ПРОДВИНУТОСТЬ»          СТРУКТУР ДАННЫХ• Количество«степеней свободы» (возможных операций со структурой данных).• Рост   ...
СТЕК•   Абстрактный тип данных.•   Базовые операции:    •   Вставка элемента (push).    •   Извлечение элемента        (po...
ПРИМЕНЕНИЯ СТЕКА• Машинный     стек.• Вычисление    выражений в обратной польской записи: • (1+2*4+3)     →124*+3+ • Язык ...
ОЧЕРЕДЬ•   Абстрактный тип данных.•   Базовые операции:    •   Вставка элемента (enqueue).    •   Извлечение элемента     ...
ПРИМЕНЕНИЕ ОЧЕРЕДЕЙ• Обработка   отложенных запросов. Порождение  запросов                    оооооооооооооооочередь      ...
РЕАЛИЗАЦИЯ СТЕКА• Статический   массив достаточно большого размера.                      int stack[99999];                ...
СВЯЗНЫЕ СПИСКИ• Связныйсписок (linked list) – линейно упорядоченный набор элементов, каждый из которых содержит связь со с...
ОПЕРАЦИИ СО СВЯЗНЫМ       СПИСКОМ• Вставка   элемента в голову.• Вставка   в середину.• Удаление    элемента.• Обход     с...
СВОЙСТВА СВЯЗНОГО           СПИСКА• Динамическая    структура данных.• Вставка   и удаление выполняются за O(1).• Медленны...
ПРИМЕРЫ ИСПОЛЬЗОВАНИЯ       СПИСКОВ• Многочлены    (символьная алгебра).• Реализация   стеков и очередей.• Цепочки   класт...
РЕАЛИЗАЦИЯ СТЕКА• Связный  список с использованием динамической памяти (malloc и free).   struct StackNode {            st...
ДВУСВЯЗНЫЙ СПИСОК  Голова                           Хвост Преимущество: одинаковая легкость      операций в обе стороны
КОЛЬЦЕВОЙ СВЯЗНЫЙ     СПИСОК   Голова?
ПРИМЕНЕНИЕ КОЛЬЦЕВЫХ       СПИСКОВ• Список   вершин многоугольника.• Список   процессов в системе с разделением времени.• ...
ДВУСВЯЗНЫЙ КОЛЬЦЕВОЙ       СПИСОК
КонецКОНЕЦ ПЯТОЙ ЛЕКЦИИ     Чем больше степеней свободы, тем лучше.Если не приходится за это слишком дорого платить.
Upcoming SlideShare
Loading in …5
×

ОПК № 5 – Составные типы данных, списки

884 views

Published on

1. Записи
2. Массивы.
3. Адресация в многомерных массивах: C-style, FORTRAN-style.
4. Данные как «белый ящик» и как «черный ящик».
5. Стеки, очереди и их применение в различных задачах.
6. Реализация стека с помощью массива в С.
7. Связные списки: структура и свойства.
8. Операции над списками.
9. Реализация стека с помощью связного списка в С.
10. Двусвязные списки, кольцевые списки, двусвязные кольцевые списки.

Published in: Technology
  • Be the first to comment

  • Be the first to like this

ОПК № 5 – Составные типы данных, списки

  1. 1. ОСНОВЫ ПРОГРАММНОГО КОНСТРУИРОВАНИЯ Лекция № 5 19 марта 2013 г.
  2. 2. СОСТАВНЫЕ ТИПЫ ДАННЫХ
  3. 3. ЗАПИСИ• Объединяют разнотипные данные, относящиеся к одному объекту из предметной области. struct Point { struct Order { double x, y, z; struct User *user; }; struct Date date; int nitems; struct Planet { struct OrderItem *items; const char *name; }; double mass; double radius; /* .... */ };
  4. 4. МАССИВЫ• Множество однотипных данных: • Набор временных отсчетов. • Векторы и матрицы. • Набор строк.• Элементы массива хранятся в смежных ячейках памяти.
  5. 5. ОДНОМЕРНЫЙ МАССИВ• A0 – адрес начала массива.•s – размер элемента массива.• Чему равен A(n) – адрес n-го элемента массива? int a[5]; Индекс 0 1 2 3 4 Адрес A0 ? ? ? ?
  6. 6. ОДНОМЕРНЫЙ МАССИВ A(n) = A0 + n⋅s
  7. 7. ДВУМЕРНЫЙ МАССИВ int a[2][3]; С-style или FORTRAN-style k k 0 1 2 0 2 4m m 3 4 5 1 3 5 n = 3m+k a[m][k] n = 2k+m
  8. 8. N-МЕРНЫЙ МАССИВ•K размерностей: A[NK][NK-1]....[N1].• А(nK, nK-1, …, n1) = A0 + s⋅n(nK, nK-1, …, n1).• n(nK, nK-1, …, n1) =?
  9. 9. C-STYLE• Уменьшаем порядок задачи на единицу (K → K−1), «откусывая» последнюю размерность: • n(nK, nK−1, …, n1) = n(nK, nK−1, …, n2, 0) + n1 • n(nK, nK−1, …, n2, 0) = n(nK, nK−1, …, n2)⋅N1•В итоге: • n(nK, nK-1, …, n1) = (((…(nK⋅NK−1+nK−1)…))⋅N2+n2)⋅N1+n1
  10. 10. FORTRAN-STYLE• «Откусываем» первую размерность: • n(nK, nK−1, …, n1) = n(0, nK−1, …, n1) + nK • n(0, nK−1, …, n1) = n(nK−1, …, n1)⋅NK
  11. 11. ДВА СПОСОБА СМОТРЕТЬ НА ДАННЫЕ «Белый ящик» «Черный ящик» (прозрачный) (непрозрачный) Устройство Операции
  12. 12. ОПЕРАЦИИ НАД ДАННЫМИ• Записи: • Массив: • Прочитать элемент по имени. • Прочитать элемент по индексу. • Изменить элемент по имени. • Изменить элемент по индексу. • Добавить новый элемент. • Изменить размер массива. • Удалить элемент. • Добавить элемент. • Удалить элемент.
  13. 13. «ПРОДВИНУТОСТЬ» СТРУКТУР ДАННЫХ• Количество«степеней свободы» (возможных операций со структурой данных).• Рост количества степеней свободы возможен: • за счет усложнения внутренней структуры; • за счет понижения быстродействия.
  14. 14. СТЕК• Абстрактный тип данных.• Базовые операции: • Вставка элемента (push). • Извлечение элемента (pop). push pop• Принцип LIFO (last-in, first- out) – «последним вошел, первым вышел».
  15. 15. ПРИМЕНЕНИЯ СТЕКА• Машинный стек.• Вычисление выражений в обратной польской записи: • (1+2*4+3) →124*+3+ • Язык Postscript.• Поиск пути в лабиринте.• Задачи с иерархией элементов (обход дерева).
  16. 16. ОЧЕРЕДЬ• Абстрактный тип данных.• Базовые операции: • Вставка элемента (enqueue). • Извлечение элемента (dequeue). enqueue• Принцип FIFO (first-in, first- out) – «первым вошел, первым вышел». dequeue
  17. 17. ПРИМЕНЕНИЕ ОЧЕРЕДЕЙ• Обработка отложенных запросов. Порождение запросов оооооооооооооооочередь Обработка запросов
  18. 18. РЕАЛИЗАЦИЯ СТЕКА• Статический массив достаточно большого размера. int stack[99999]; int sp = 0; stack[sp] = 10; sp++; stack[sp] = 20; sp++; sp--; stack[sp]; // => 20
  19. 19. СВЯЗНЫЕ СПИСКИ• Связныйсписок (linked list) – линейно упорядоченный набор элементов, каждый из которых содержит связь со следующим элементом. Голова Хвост
  20. 20. ОПЕРАЦИИ СО СВЯЗНЫМ СПИСКОМ• Вставка элемента в голову.• Вставка в середину.• Удаление элемента.• Обход списка.• Поиск элемента по критерию.
  21. 21. СВОЙСТВА СВЯЗНОГО СПИСКА• Динамическая структура данных.• Вставка и удаление выполняются за O(1).• Медленный поиск по номеру (индексирование): O(n).
  22. 22. ПРИМЕРЫ ИСПОЛЬЗОВАНИЯ СПИСКОВ• Многочлены (символьная алгебра).• Реализация стеков и очередей.• Цепочки кластеров в файловых системах.
  23. 23. РЕАЛИЗАЦИЯ СТЕКА• Связный список с использованием динамической памяти (malloc и free). struct StackNode { struct StackNode *root, *n1, *n2; int n; struct StackNode *next; n1 = (struct StackNode *)malloc( }; sizeof(struct StackNode)); n1->n = 10; n1->next = 0; root = n1; n2 = (struct StackNode *)malloc( sizeof(struct StackNode)); n2->n = 20; n2->next = root; root = n2; root->n; // => 20 root = root->next;
  24. 24. ДВУСВЯЗНЫЙ СПИСОК Голова Хвост Преимущество: одинаковая легкость операций в обе стороны
  25. 25. КОЛЬЦЕВОЙ СВЯЗНЫЙ СПИСОК Голова?
  26. 26. ПРИМЕНЕНИЕ КОЛЬЦЕВЫХ СПИСКОВ• Список вершин многоугольника.• Список процессов в системе с разделением времени.• Кольцо буферов ввода/вывода.
  27. 27. ДВУСВЯЗНЫЙ КОЛЬЦЕВОЙ СПИСОК
  28. 28. КонецКОНЕЦ ПЯТОЙ ЛЕКЦИИ Чем больше степеней свободы, тем лучше.Если не приходится за это слишком дорого платить.

×