Рубрики
Без рубрики

Реализуйте очередь, используя список.

Заявление о проблеме: Реализуйте очередь с такими методами, как Enqueue, Dequeue, Size, Isempty, используя … с меткой Python, учебное пособие.

Реализация структур данных в Python (7 серии деталей)

Заявление о проблеме: Реализуйте очередь с такими методами, как Enqueue, Dequeue, Size, Isempty, используя списки в Python.

Этот подход будет медленным из -за следующей причины

Можно использовать список в качестве очереди, где первым добавленным элементом является первый извлеченный элемент («First-In, First Out»); Тем не менее, списки не являются эффективными для этой цели. В то время как добавления и POPS из конца списка быстрые, выполнение вставки или всплывающих заводов с самого начала списка медленно (потому что все другие элементы должны быть сдвинуты на один). Источник

Тестовые случаи

  1. Энкеуэ
    • Энкеуэ на пустой очереди.
    • Энкеуэ на непутной очереди.
  2. Dequeue
    • Dequeue на пустой очереди -> Нет.
    • Dequeue на очереди только с одним элементом -> значение.
    • Dequeue на очереди с несколькими элементами -> Значение.
  3. Размер
    • Размер в пустой очереди -> Нет.
    • Размер в не пустой очереди -> значение.
  4. пустой
    • Импти на пустой очереди -> правда.
    • Isempty на не пустой очереди -> Неверно.

Алгоритм

  1. Энкеуэ
    • Вставьте элемент в первый индекс списка.
    • Если элемент уже присутствует в индексе, он будет смещен на один бит.
  2. Dequeue
    • Если очередь пуста,
      • вернуть нет
    • Еще,
      • Удалить последний элемент из списка
      • Вернуть элемент
  3. Размер
    • Вернуть длину списка.
  4. пустой
    • Если список пуст,
      • вернуть правду.
    • Еще,
      • вернуть ложь

Сложность времени и пространства

  1. Энкеуэ.
    • Сложность времени: лучший случай – O (1), худший случай – O (n)
    • Сложность пространства: O (1)
  2. Dequeue.
    • Сложность времени: O (1)
    • Сложность пространства: O (1)
  3. Размер
    • Сложность времени: O (1)
    • Сложность пространства: O (1)
  4. пустой
    • Сложность времени: 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”