← Назад к вопросам
Реализация очереди
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:
- Всегда обрабатывай исключения при работе с пустой очередью
- Проверяй граничные случаи: пустая, один элемент, много элементов
- Используй оптимальную структуру данных (deque вместо list)
- Тестируй FIFO поведение как критичный принцип
- Профилируй производительность для больших очередей в нагрузочных тестах