Реализация структур данных в Python (7 серии деталей)
Заявление о проблеме: Реализуйте очередь с такими методами, как Enqueue, Dequeue, Size, Isempty, используя списки в Python.
Этот подход будет медленным из -за следующей причины
Можно использовать список в качестве очереди, где первым добавленным элементом является первый извлеченный элемент («First-In, First Out»); Тем не менее, списки не являются эффективными для этой цели. В то время как добавления и POPS из конца списка быстрые, выполнение вставки или всплывающих заводов с самого начала списка медленно (потому что все другие элементы должны быть сдвинуты на один). Источник
Тестовые случаи
- Энкеуэ
- Энкеуэ на пустой очереди.
- Энкеуэ на непутной очереди.
- Dequeue
- Dequeue на пустой очереди -> Нет.
- Dequeue на очереди только с одним элементом -> значение.
- Dequeue на очереди с несколькими элементами -> Значение.
- Размер
- Размер в пустой очереди -> Нет.
- Размер в не пустой очереди -> значение.
- пустой
- Импти на пустой очереди -> правда.
- Isempty на не пустой очереди -> Неверно.
Алгоритм
- Энкеуэ
- Вставьте элемент в первый индекс списка.
- Если элемент уже присутствует в индексе, он будет смещен на один бит.
- Dequeue
- Если очередь пуста,
- вернуть нет
- Еще,
- Удалить последний элемент из списка
- Вернуть элемент
- Если очередь пуста,
- Размер
- Вернуть длину списка.
- пустой
- Если список пуст,
- вернуть правду.
- Еще,
- вернуть ложь
- Если список пуст,
Сложность времени и пространства
- Энкеуэ.
- Сложность времени: лучший случай – O (1), худший случай – O (n)
- Сложность пространства: O (1)
- Dequeue.
- Сложность времени: O (1)
- Сложность пространства: O (1)
- Размер
- Сложность времени: O (1)
- Сложность пространства: O (1)
- пустой
- Сложность времени: O (1)
- Сложность пространства: O (1) ***
Код
class Queue(object): def __init__(self): self.items = [] def isEmpty(self): return self.items == [] def enqueue(self, data): self.items.insert(0, data) def dequeue(self): if self.isEmpty(): return None print(self.items) return self.items.pop() def size(self): return len(self.items)
Модульный тест
import unittest from queueList import Queue class TestQueueList(unittest.TestCase): def testQueue(self): print('Test: Empty Queue') queue = Queue() self.assertEqual(queue.dequeue(), None) self.assertEqual(queue.size(), 0) self.assertEqual(queue.isEmpty(), True) print('Test: One element') queue = Queue() queue.enqueue(5) self.assertEqual(queue.size(), 1) self.assertEqual(queue.dequeue(), 5) self.assertEqual(queue.isEmpty(), True) print('Test: Multiple elements') queue = Queue() queue.enqueue(1) queue.enqueue(2) queue.enqueue(3) self.assertEqual(queue.size(), 3) self.assertEqual(queue.dequeue(), 1) self.assertEqual(queue.dequeue(), 2) self.assertEqual(queue.isEmpty(), False) self.assertEqual(queue.dequeue(), 3) self.assertEqual(queue.isEmpty(), True) print('Success: testQueue') def main(): test = TestQueueList() test.testQueue() if __name__ == '__main__': main()
GitHub Repo
Счастливого кодирования !!!
Реализация структур данных в Python (7 серии деталей)
Оригинал: “https://dev.to/codewithml/implement-a-queue-using-a-list-10mo”