Найти тему

Контейнеры стандартной библиотеки C++. Микросправочник. Контейнеры-адаптеры. Ч.3

queue, priority_queue и stack являются структурами данных в программировании, которые используются для хранения элементов и управления порядком их добавления или удаления.

Queue (очередь):

  • Очередь работает по принципу "первым пришел - первым вышел" (FIFO - First-In-First-Out). Это означает, что элементы добавляются в конец очереди, а при удалении элементов они удаляются из начала очереди. Новые элементы добавляются в конец, а старые элементы перманентно переносятся в начало до тех пор, пока они не будут удалены.
  • Обычные операции с очередью включают добавление элемента в конец очереди (enqueue или push) и удаление элемента с начала очереди (dequeue или pop).
  • Очередь можно реализовать в виде динамического массива или связанного списка.

Priority Queue (очередь с приоритетами):

  • Очередь с приоритетами работает таким образом, что каждому элементу назначается значение приоритета. При извлечении элементов из очереди элемент с наивысшим приоритетом будет удален первым.
  • Обычные операции с очередью с приоритетами включают добавление элемента с указанием приоритета (push) и удаление элемента с наивысшим приоритетом (pop).
  • Внутри очереди с приоритетами обычно используется структура данных, такая как двоичная куча (binary heap) для поддержания правильного порядка элементов по приоритету. Таким образом, элементы с наивысшими приоритетами находятся ближе к корню кучи.

Stack (стек):

  • Стек работает по принципу "последним пришел - первым вышел" (LIFO - Last-In-First-Out). Это означает, что элементы добавляются и удаляются с одного и того же конца стека, который обычно называется вершиной стека.
  • Обычные операции со стеком включают добавление элемента в вершину (push) и удаление элемента из вершины (pop).
  • Стек можно реализовать с помощью динамического массива или связанного списка.

Эти структуры данных имеют различные характеристики и применяются в разных сценариях в зависимости от нужд программы. Например, очереди используются для моделирования ожидания задач, стеки - для обработки вызовов функций в программе, а очереди с приоритетами - для управления задачами с разным уровнем важности.