← Назад к вопросам

Реализация очереди

1.7 Middle🔥 141 комментариев
#Теория тестирования

Условие

Реализуйте структуру данных очередь (Queue) с операциями:

  • enqueue(x) - добавить элемент в конец очереди
  • dequeue() - удалить и вернуть элемент из начала очереди
  • front() - вернуть элемент из начала без удаления
  • isEmpty() - проверить, пуста ли очередь

Пример

queue.enqueue(1) queue.enqueue(2) queue.front() -> 1 queue.dequeue() -> 1 queue.dequeue() -> 2 queue.isEmpty() -> true

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Решение

Очередь (Queue) — фундаментальная структура данных, используемая в тестировании для симуляции асинхронных операций, обработки задач и работы с событиями.

Реализация на Python

class Queue:
    def __init__(self):
        self.items = []
    
    def enqueue(self, x):
        """Добавить элемент в конец очереди"""
        self.items.append(x)
    
    def dequeue(self):
        """Удалить и вернуть элемент из начала очереди"""
        if self.isEmpty():
            raise IndexError("Dequeue from empty queue")
        return self.items.pop(0)
    
    def front(self):
        """Вернуть элемент из начала без удаления"""
        if self.isEmpty():
            raise IndexError("Front of empty queue")
        return self.items[0]
    
    def isEmpty(self):
        """Проверить, пуста ли очередь"""
        return len(self.items) == 0

Оптимизированная реализация с collections.deque

from collections import deque

class OptimizedQueue:
    def __init__(self):
        self.items = deque()
    
    def enqueue(self, x):
        self.items.append(x)
    
    def dequeue(self):
        if self.isEmpty():
            raise IndexError("Dequeue from empty queue")
        return self.items.popleft()
    
    def front(self):
        if self.isEmpty():
            raise IndexError("Front of empty queue")
        return self.items[0]
    
    def isEmpty(self):
        return len(self.items) == 0

Почему deque лучше: append() и popleft() работают за O(1), а list.pop(0) за O(n).

Пример использования

queue = Queue()
queue.enqueue(1)
queue.enqueue(2)
print(queue.front())    # 1
print(queue.dequeue())  # 1
print(queue.dequeue())  # 2
print(queue.isEmpty())  # True

Реализация на JavaScript

class Queue {
    constructor() {
        this.items = [];
    }
    
    enqueue(x) {
        this.items.push(x);
    }
    
    dequeue() {
        if (this.isEmpty()) throw new Error("Dequeue from empty queue");
        return this.items.shift();
    }
    
    front() {
        if (this.isEmpty()) throw new Error("Front of empty queue");
        return this.items[0];
    }
    
    isEmpty() {
        return this.items.length === 0;
    }
}

Best Practices для QA:

  1. Всегда обрабатывай исключения при работе с пустой очередью
  2. Проверяй граничные случаи: пустая, один элемент, много элементов
  3. Используй оптимальную структуру данных (deque вместо list)
  4. Тестируй FIFO поведение как критичный принцип
  5. Профилируй производительность для больших очередей в нагрузочных тестах
Реализация очереди | PrepBro