Этот вопрос довольно расплывчатый.Причина, по которой мы имеем несколько структур данных, заключается в том, что все они поддерживают разные шаблоны доступа более или менее эффективно, чем другие.Например:
- Связанный список является хорошим выбором, если весь доступ осуществляется с начала списка вперед.
- Динамический массив является хорошим выбором, если доступы случайные ивставка / удаление в конце.
- Стек является хорошим выбором, если доступ всегда FIFO.
- Очередь является хорошим выбором, если доступ всегда LIFO.
- Deque - хороший выбор, если доступы всегда на концах.
- Приоритетная очередь - хороший выбор, если доступы всегда к наименьшему элементу.
- Хеш-таблица хорошаесли доступ полностью случайный и упорядочение не требуется.
- Сбалансированное двоичное дерево поиска хорошо, если доступ полностью случайный и требуется упорядочение.
- Три хорошо, если элементы хранятсяявляются строками или иным образом цифровыми.
- KD-дерево хорошо, если элементы являются точками в пространстве, и вы хотите поддерживать запросы диапазона или поиск ближайшего соседа.
- Структура поиска объединения iХорошо, если вы хотите знать, как элементы связаны друг с другом.
- Дерево Ван Эмда Боаса хорошо, если значения целые, доступы случайные, и вы хотите, чтобы они были в порядке.
- Квадрат хорош, если вы хотите сохранить элементы в виде геометрической структуры и хотите получить доступ к точкам и ребрам возле определенных граней (или наоборот)
- и т. Д.
Есть множество хороших ответов на этот вопрос в зависимости от того, что вы пытаетесь сделать с данными.Этот список является лишь небольшой выборкой того, какие структуры данных существуют, и все они могут быть правильным ответом в зависимости от обстоятельств.Они также могут быть неправильным ответом 1034 * в зависимости от обстоятельств.Помните - при выборе структуры данных убедитесь, что вы знаете, какую проблему вы пытаетесь решить!
Что касается вашего второго вопроса: в худшем случае это может занять O (n) время, чтобы найти элемент в связанном списке.Это происходит либо в том случае, если искомый элемент отсутствует в связанном списке, либо в конце.В этом случае вам нужно сканировать весь связанный список по одному элементу за раз, прежде чем вы сможете решить, содержится ли соответствующий элемент в списке.
Надеюсь, это поможет!