Содержание
- 3. План лекции Абстрактные типы данных Несколько примеров Определение Зачем использовать АТД АТД список Реализация на языке
- 4. Кто придумал абстрактные типы данных?
- 5. Кто придумал абстрактные типы данных? Барбара Лисков р. 1939 Стивен Жиль р. ? Liskov B., Zilles
- 6. Кто придумал абстрактные типы данных? Барбара Лисков р. 1939 Стивен Жиль Liskov B., Zilles S. Programming
- 7. Кто придумал абстрактные типы данных? Барбара Лисков р. 1939 Стивен Жиль Liskov B., Zilles S. Programming
- 8. Примеры АТД Система регулирования скорости Задать скорость Получить текущие параметры Восстановить предыдущее значение скорости Отключить систему
- 9. Примеры АТД Система регулирования скорости Задать скорость Получить текущие параметры Восстановить предыдущее значение скорости Отключить систему
- 10. Примеры АТД Система регулирования скорости Задать скорость Получить текущие параметры Восстановить предыдущее значение скорости Отключить систему
- 11. Примеры АТД Система регулирования скорости Задать скорость Получить текущие параметры Восстановить предыдущее значение скорости Отключить систему
- 12. Примеры АТД Система регулирования скорости Задать скорость Получить текущие параметры Восстановить предыдущее значение скорости Отключить систему
- 13. Примеры АТД Система регулирования скорости Задать скорость Получить текущие параметры Восстановить предыдущее значение скорости Отключить систему
- 14. Примеры АТД Система регулирования скорости Задать скорость Получить текущие параметры Восстановить предыдущее значение скорости Отключить систему
- 15. Примеры АТД Топливный бак Заполнить бак Слить топливо Получить емкость топливного бака Получить статус топливного бака
- 16. Примеры АТД Топливный бак Заполнить бак Слить топливо Получить емкость топливного бака Получить статус топливного бака
- 17. Примеры АТД Топливный бак Заполнить бак Слить топливо Получить емкость топливного бака Получить статус топливного бака
- 18. Примеры АТД Топливный бак Заполнить бак Слить топливо Получить емкость топливного бака Получить статус топливного бака
- 19. Примеры АТД Топливный бак Заполнить бак Слить топливо Получить емкость топливного бака Получить статус топливного бака
- 20. Примеры АТД Топливный бак Заполнить бак Слить топливо Получить емкость топливного бака Получить статус топливного бака
- 21. Примеры АТД Топливный бак Заполнить бак Слить топливо Получить емкость топливного бака Получить статус топливного бака
- 22. Примеры АТД Фонарь Включить Выключить Стек Инициализировать стек Поместить элемент Извлечь элемент Проверить наличие элементов
- 23. Примеры АТД Фонарь Включить Выключить Стек Инициализировать стек Поместить элемент Извлечь элемент Проверить наличие элементов
- 24. Примеры АТД Фонарь Включить Выключить Стек Инициализировать стек Поместить элемент Извлечь элемент Проверить наличие элементов
- 25. Примеры АТД Фонарь Включить Выключить Стек Инициализировать стек Поместить элемент Извлечь элемент Проверить наличие элементов
- 26. Примеры АТД Фонарь Включить Выключить Стек Инициализировать стек Поместить элемент Извлечь элемент Проверить наличие элементов
- 27. Примеры АТД Фонарь Включить Выключить Стек Инициализировать стек Поместить элемент Извлечь элемент Проверить наличие элементов
- 28. Примеры АТД Фонарь Включить Выключить Стек Инициализировать стек Поместить элемент Извлечь элемент Проверить наличие элементов
- 29. Примеры АТД Указатель Выделить блок памяти Освободить блок памяти Изменить объем выделенной памяти Файл Открыть Прочитать
- 30. Примеры АТД Указатель Выделить блок памяти Освободить блок памяти Изменить объем выделенной памяти Файл Открыть Прочитать
- 31. Примеры АТД Указатель Выделить блок памяти Освободить блок памяти Изменить объем выделенной памяти Файл Открыть Прочитать
- 32. Примеры АТД Указатель Выделить блок памяти Освободить блок памяти Изменить объем выделенной памяти Файл Открыть Прочитать
- 33. Примеры АТД Указатель Выделить блок памяти Освободить блок памяти Изменить объем выделенной памяти Файл Открыть Прочитать
- 34. Определение АТД Абстрактный тип данных – это множество значений и набор операций, для которых не важно
- 35. Определение АТД Абстрактный тип данных – это множество значений и набор операций, для которых не важно
- 36. Определение АТД Абстрактный тип данных – это множество значений и набор операций, для которых не важно
- 37. Определение АТД Абстрактный тип данных – это множество значений и набор операций, для которых не важно
- 38. Определение АТД Абстрактный тип данных – это множество значений и набор операций, для которых не важно
- 39. Контейнеры Контейнер – это АТД, использующийся для группировки элементов и доступа к ним
- 40. Контейнеры Контейнер – это АТД, использующийся для группировки элементов и доступа к ним
- 41. Контейнеры Контейнер – это АТД, использующийся для группировки элементов и доступа к ним
- 42. Контейнеры Контейнер – это АТД, использующийся для группировки элементов и доступа к ним
- 43. Контейнеры Контейнер – это АТД, использующийся для группировки элементов и доступа к ним
- 44. Контейнеры Контейнер – это АТД, использующийся для группировки элементов и доступа к ним
- 45. Контейнеры Контейнер – это АТД, использующийся для группировки элементов и доступа к ним
- 46. Контейнеры Контейнер – это АТД, использующийся для группировки элементов и доступа к ним
- 47. Зачем использовать АТД? Реализация АТД Скрываем детали реализации Упрощаем оптимизацию кода Ограничиваем область использования данных Ограничиваем
- 48. Зачем использовать АТД? Реализация АТД Скрываем детали реализации Упрощаем оптимизацию кода Ограничиваем область использования данных Ограничиваем
- 49. Зачем использовать АТД? Реализация АТД Скрываем детали реализации Упрощаем оптимизацию кода Ограничиваем область использования данных Ограничиваем
- 50. Зачем использовать АТД? Реализация АТД Скрываем детали реализации Упрощаем оптимизацию кода Ограничиваем область использования данных Ограничиваем
- 51. АТД список Конечная последовательность элементов Создать пустой список Уничтожить список Получить первый элемент списка Получить «элемент»
- 52. АТД список Конечная последовательность элементов Создать пустой список Уничтожить список Получить первый элемент списка Получить «элемент»
- 53. АТД список Конечная последовательность элементов Создать пустой список Уничтожить список Получить первый элемент списка Получить «элемент»
- 54. АТД список Конечная последовательность элементов Создать пустой список Уничтожить список Получить первый элемент списка Получить «элемент»
- 55. АТД список Конечная последовательность элементов Создать пустой список Уничтожить список Получить первый элемент списка Получить «элемент»
- 56. АТД список Конечная последовательность элементов Создать пустой список Уничтожить список Получить первый элемент списка Получить «элемент»
- 57. АТД список Конечная последовательность элементов Создать пустой список Уничтожить список Получить первый элемент списка Получить «элемент»
- 58. Реализации АТД список
- 59. Реализации АТД список Односвязный список элемент имеет 0 или 1 соседа Развернутый список
- 60. Реализации АТД список Односвязный список элемент имеет 0 или 1 соседа Развернутый список Двусвязный список элемент
- 61. Реализации АТД список Односвязный список элемент имеет 0 или 1 соседа Развернутый список Двусвязный список элемент
- 62. Реализации АТД список Односвязный список элемент имеет 0 или 1 соседа Развернутый список Двусвязный список элемент
- 63. Реализации АТД список Односвязный список элемент имеет 0 или 1 соседа Развернутый список Двусвязный список элемент
- 64. Реализации АТД список Односвязный список элемент имеет 0 или 1 соседа Развернутый список Двусвязный список элемент
- 65. Описание АТД список на языке Си // TValue -- значения // TList -- список TValue //
- 66. Пример использования АТД список // Проверить присутствие значения в списке int HasValue(TList list, TValue value) {
- 67. Пример использования АТД список // Проверить присутствие значения в списке int HasValue(TList list, TValue value) {
- 68. Реализация через 1-связный список struct TList { TValue Value; struct TList* Next; }; typedef struct TList*
- 69. Реализация через 1-связный список struct TList { TValue Value; struct TList* Next; }; typedef struct TList*
- 70. Реализация через 1-связный список struct TList { TValue Value; struct TList* Next; }; typedef struct TList*
- 71. Реализация через 1-связный список struct TList { TValue Value; struct TList* Next; }; typedef struct TList*
- 72. Все операции, кроме InsertAfter и RemoveAfter TList MakeList(void) { return NULL; } void DestroyList(TList list) {
- 73. Все операции, кроме InsertAfter и RemoveAfter TList MakeList(void) { return NULL; } void DestroyList(TList list) {
- 74. Все операции, кроме InsertAfter и RemoveAfter TList MakeList(void) { return NULL; } void DestroyList(TList list) {
- 75. Все операции, кроме InsertAfter и RemoveAfter TList MakeList(void) { return NULL; } void DestroyList(TList list) {
- 76. Все операции, кроме InsertAfter и RemoveAfter TList MakeList(void) { return NULL; } void DestroyList(TList list) {
- 77. Все операции, кроме InsertAfter и RemoveAfter TList MakeList(void) { return NULL; } void DestroyList(TList list) {
- 78. Все операции, кроме InsertAfter и RemoveAfter TList MakeList(void) { return NULL; } void DestroyList(TList list) {
- 79. Все операции, кроме InsertAfter и RemoveAfter TList MakeList(void) { return NULL; } void DestroyList(TList list) {
- 80. Реализация InsertAfter void InsertAfter(TList* list, TItem item, TValue value) { TList new = malloc(sizeof *new); assert(new
- 81. Вставка в 1-связный список в общем случае Value Value Value new Next item Next Next Value
- 82. Реализация RemoveAfter void RemoveAfter(TList* list, TItem item) { TItem itemToRemove = NULL; if (item == NULL)
- 83. Удаление из 1-связного списка в общем случае
- 84. Удаление из 1-связного списка в общем случае *list itemToRemove Value Next Value Next Value Next Value
- 85. Удаление из 1-связного списка в общем случае *list itemToRemove Value Next Value Next Value Next Value
- 86. Реализация через 2-связный список struct TDoublyLinkedList { TValue Value; struct TDoublyLinkedList* Next; struct TDoublyLinkedList* Previous; };
- 87. Реализация через 2-связный список struct TDoublyLinkedList { TValue Value; struct TDoublyLinkedList* Next; struct TDoublyLinkedList* Previous; };
- 88. Реализация через 2-связный список struct TDoublyLinkedList { TValue Value; struct TDoublyLinkedList* Next; struct TDoublyLinkedList* Previous; };
- 89. Реализация через 2-связный список struct TDoublyLinkedList { TValue Value; struct TDoublyLinkedList* Next; struct TDoublyLinkedList* Previous; };
- 90. Удаление из 2-связного списка TDoublyLinkedList q = p->Next; p->Next->Next->Previous = p; // (1) p->Next = q->Next;
- 91. Вставка в 2-связный список TDoublyLinkedList q = malloc(sizeof *q); assert(q != NULL); p->Next->Previous = q; //
- 92. АТД на основе списков Циклический список Стек (stack) Очередь (queue) Дек (double-ended queue, deque, двухголовая очередь)
- 93. АТД на основе списков Циклический список Стек (stack) Очередь (queue) Дек (double-ended queue, deque, двухголовая очередь)
- 94. АТД на основе списков Циклический список Стек (stack) Очередь (queue) Дек (double-ended queue, deque, двухголовая очередь)
- 95. АТД циклический список Последовательность с конечным периодом отсутствие периода – частный случай конечного периода Операции АТД
- 96. АТД циклический список Последовательность с конечным периодом отсутствие периода – частный случай конечного периода Операции АТД
- 97. АТД циклический список Последовательность с конечным периодом отсутствие периода – частный случай конечного периода Операции АТД
- 98. АТД циклический список Последовательность с конечным периодом отсутствие периода – частный случай конечного периода Операции АТД
- 99. АТД циклический список Последовательность с конечным периодом отсутствие периода – частный случай конечного периода Операции АТД
- 100. АТД стек Стек -- это список, в котором добавление/удаление элементов происходит только на одном конце Последний
- 101. АТД стек Стек -- это список, в котором добавление/удаление элементов происходит только на одном конце Последний
- 102. АТД стек Стек -- это список, в котором добавление/удаление элементов происходит только на одном конце Последний
- 103. АТД стек Стек -- это список, в котором добавление/удаление элементов происходит только на одном конце Последний
- 104. АТД стек Стек -- это список, в котором добавление/удаление элементов происходит только на одном конце Последний
- 105. Операции со стеком
- 106. Операции со стеком
- 107. Операции со стеком
- 108. Операции со стеком
- 109. Операции со стеком
- 110. Операции со стеком
- 111. Операции со стеком
- 112. Операции со стеком
- 113. Польская запись выражений
- 114. Польская запись выражений Скобочная (инфиксная) запись a + (f – b * c / (z –
- 115. Польская запись выражений Скобочная (инфиксная) запись a + (f – b * c / (z –
- 116. Польская запись выражений Скобочная (инфиксная) запись a + (f – b * c / (z –
- 117. Польская запись выражений Скобочная (инфиксная) запись a + (f – b * c / (z –
- 118. Вход: скобочная запись арифметического выражения Выход: польская запись того же арифметического выражения Построение польской записи
- 119. Вход: скобочная запись арифметического выражения Выход: польская запись того же арифметического выражения Построение польской записи
- 120. Вход: скобочная запись арифметического выражения Выход: польская запись того же арифметического выражения Построение польской записи
- 121. Вход: скобочная запись арифметического выражения Выход: польская запись того же арифметического выражения Построение польской записи
- 122. Сумма без скобок скобочная = 1 + 2 – x + y – z – 5
- 123. Сумма произведений без скобок скобочная = 1 * 2 – x / y * z –
- 124. Сумма произведений без скобок скобочная = 1 * 2 – x / y * z –
- 125. Сумма произведений без скобок скобочная = 1 * 2 – x / y * z –
- 126. Сумма произведений без скобок со стеком скобочная = 1 * 2 – x / y *
- 127. Сумма произведений без скобок со стеком скобочная = 1 * 2 – x / y *
- 128. Сумма произведений без скобок со стеком скобочная = 1 * 2 – x / y *
- 129. Сумма произведений без скобок со стеком скобочная = 1 * 2 – x / y *
- 130. Сумма произведений без скобок со стеком скобочная = 1 * 2 – x / y *
- 131. Сумма произведений без скобок со стеком скобочная = 1 * 2 – x / y *
- 132. Построение польской записи операторы = CreateStack(), польская = «» пока скобочная != «» повторять х =
- 133. Построение польской записи операторы = CreateStack(), польская = «» пока скобочная != «» повторять х =
- 134. Пример Выходная строка: Стек: a + ( f − b * c / ( z −
- 135. Вычисление по польской записи операнды = CreateStack() пока польская != «» повторять х = первый элемент
- 136. 5 Пример Входная строка: Стек: = 5 2 3 * 4 2 / - 4 /
- 138. Скачать презентацию