Очередь

Январь 12, 2019  · 2 мин. чтения

Очередь (Queue)


Очередь – абстрактный тип данных, представляющий собой список элементов, организованных по принципу FIFO (англ. first in, first out, «первый пришёл – первый вышел»). Добавление элемента (принято обозначать словом enqueue — поставить в очередь) возможно лишь в конец очереди, выборка – только из начала очереди (что принято называть словом dequeue — убрать из очереди), при этом выбранный элемент из очереди удаляется (Рисунок 5). [4]

Рисунок 5 – Пример очереди


В качестве примера из жизни для описания процесса работы очереди следует рассмотреть классическую очередь в магазине. Если придет новый человек, то он присоединится к очереди с конца, а не с начала. Человек, стоящий впереди, расплатится первым и покинет очередь.

В очереди предусмотрены классические методы, которые позволяют взаимодействовать и управлять ее элементами.

  1. Операция добавления элемента (enqueue).
  2. Операция удаления элемента (dequeue).
  3. Операция считывания элемента, который вернет следующий вызов метода dequeue (peek).
  4. Операция проверки очереди на наличие в ней элементов (isEmpty).

Ниже приведена реализация очереди и его методов на языке программирования Swift.

import UIKit

struct queue {
    var array: [String] = []

    mutating func enqueue(element: String) {
        array.append(element)
    }

    mutating func dequeue() -> String {
        if array.count == 0 {
            fatalError("The queue is empty")
        } else {
            return array.removeFirst()
        }
    }

    func peek() -> String {
        guard let firstElement = array.first else { fatalError("The queue is empty") }
        return firstElement
    }

    func isEmpty() -> Bool {
        if array.isEmpty {
            return true
        } else {
          return false
        }
    }
}

var testQueue = queue()

testQueue.isEmpty()

testQueue.enqueue(element: "Дерево")
testQueue.enqueue(element: "Лист")
testQueue.enqueue(element: "Цветок")
testQueue.enqueue(element: "Куст")

print(testQueue)

testQueue.isEmpty()

testQueue.dequeue()

print(testQueue)

testQueue.peek()
Рисунок 6 – Результаты выполнения операций над очередью