Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Структуры данных - лекция: стек и очередь

Avatar for Anton Anton
January 11, 2025

Структуры данных - лекция: стек и очередь

Лекция курса "Структуры данных"
Стек и очередь

- Последовательность однотипных элементов
- Очередь (Queue), примеры
- Стек (Stack), примеры
- Задания для самостоятельной работы

updt: 07.05.2025

Avatar for Anton

Anton

January 11, 2025
Tweet

More Decks by Anton

Other Decks in Education

Transcript

  1. Допустим, у нас есть последовательность однотипных элементов • Если их

    упорядочить, выстроив один за другим (можно пронумеровать, выстроив натуральный ряд), • У нас получится массив элементов или список элементов • Дальше встаёт вопрос, как мы будем элементы в эту последовательность добавлять и извлекать • Можно произвольным образом (по адресу), а можно ввести некоторое правило
  2. Очередь (Queue) • Не столько структура, сколько поведение • FIFO:

    first-in first-out • Поведение можно реализовать поверх массива или списка Операции: • Add (enqueue) — поместить элемент в очередь • Remove (dequeue) — извлечь элемент из очереди
  3. Жизненные ситуации • Живая очередь в магазине • Электронная очередь

    • Конвейер на производстве • Строительство юнитов на базе (RTS) • Очередь событий с устройств ввода (нажатие кнопок клавиатуры и клики мышки) • «Final destination» («Пункт назначения», 2000)
  4. Стек (Stack) • Не столько структура, сколько поведение • LIFO:

    last-in first-out • Поведение можно реализовать поверх массива или списка Операции: • Push — положить элемент на вершину стека • Pop — забрать элемент с вершины стека
  5. Жизненные ситуации • Стопка тетрадей на проверку • Стопка грязных

    тарелок • Магазин в пистолете • История изменений + ctrl+Z • «It follows» («Оно», 2014)
  6. Стек — сегмент памяти • Указатель стека (stack pointer) •

    Вызов функции: кадр стека добавляется на вершину • Завершение работы: последний добавленный кадр удаляется с вершины стека
  7. Вариант-1: регистр • Пользователь нажимает клавишу на клавиатуре • Драйвер

    клавиатуры записывает код символа нажатой клавиши в регистр • Операционная система постоянно проверяет значение регистра • Если со времени последнего обращения была нажата очередная клавиша, читает код символа из регистра • Выводит символ, извлеченный из регистра, на экран
  8. Вариант-2: очередь • Пользователь нажимает клавишу на клавиатуре • Драйвер

    клавиатуры помещает код символа нажатой клавиши в очередь • Операционная система постоянно проверяет содержимое очереди • Если очередь не пуста, берет элемент из головы очереди • Выводит символ, взятый из очереди, на экран
  9. Реализация • Стек и очередь можно организовать поверх подходящего контейнера

    • Например, поверх массива (фиксированная ёмкость, т. е. максимальный размер) или списка (ёмкость увеличивается по мере необходимости) • (Список, в свою очередь, может быть связным или списком на основе массива — не важно)
  10. Реализация • Можно не делать реализацию функциональных методов (push/pop/enque/dequeue), а

    просто размещать и извлекать элементы из соответствующих позиций контейнера • (Один и тот же контейнер может вести себя как стек или очередь или как контейнер произвольного доступа по мере необходимости)
  11. • Любой вариант на выбор • Плюс — предметная область

    (сценарий применения в прикладной системе автоматизации)
  12. Например: стек • Симулятор контейнера: добавить посылку в контейнер (телевизор,

    велосипед, цистерна), достать предмет из контейнера, посмотреть содержимое контейнера
  13. Например: очередь • Конвейер на заводе переработки мусора: • добавляем

    разные объекты (бутылка, банка, тряпка, гнилой арбуз и т. п.) — конвейер заполняется • Снимаем объекты с конвейера для переработки — автоматизированный модуль распознает объект и применяет к нему соответствующий инструмент • Операции: добавить объект, извлечь объект, посмотреть последовательность объектов на конвейере
  14. Например: очередь • Электронная очередь в МФЦ • Клиент +

    проблема (поменять паспорт, подать документы на льготу, ...) • Остальное — аналогично