Реализация стеков и очереди - PullRequest
1 голос
/ 08 мая 2020

Как лучше всего реализовать стеки и очереди:

  • С нуля (например, список)

  • Использование композиции (с использованием списка )

  • Использование наследования (извлечение из списка)

Критерии использования: временная сложность, простота кода, ремонтопригодность.

1 Ответ

0 голосов
/ 11 мая 2020

Стеки и очереди - это относительно простые структуры данных. При правильном использовании они обычно будут иметь временную сложность O (1) для всех реализаций. Вам просто нужно получить данные с начала очереди или стека и вставить новые данные либо сзади, либо спереди соответственно. Следовательно, вам не нужно искать в структуре данных, потому что вы знаете, куда вставлять и удалять данные. https://www.bigocheatsheet.com/

Что касается простоты кода и обслуживания, создание кода с нуля, скорее всего, будет худшим. Вам придется делать всю работу самостоятельно, а все, что ломается, придется самостоятельно исправлять. (Честно говоря, мне нравится пытаться создавать структуры данных самостоятельно, потому что я могу многое узнать о сложных деталях, несмотря на очевидные недостатки.)

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

Простое использование обычного списка имеет то преимущество, что оно уже создано для вас и поддерживается другими программистами. Поэтому, вероятно, это лучший вариант.

Однако в C ++ есть шаблон очереди и стека, который, вероятно, будет лучшим для большинства случаев использования, поэтому, если вам не нужно ничего особенного, я бы просто использовал его.

Надеюсь, это будет полезно для вас.

...