Связанный список полезен, если у вас есть подмножество «выбранных» элементов из большего набора элементов, где вы должны выполнить один тип операции над «выбранным» элементом и операцию по умолчанию или вообще не выполнять никаких операций над обычный элемент и набор «выбранных» элементов могут изменяться по желанию (возможно, из-за пользовательского ввода). Поскольку удаление связанного списка может быть выполнено почти мгновенно (по сравнению со временем обхода, которое потребуется для поиска в массиве), если подмножества достаточно велики, то поддерживать связанный список быстрее, чем поддерживать массив или восстанавливать все подмножество с помощью Сканирование всего большого набора каждый раз, когда вам нужно подмножество.
С помощью хэш-таблицы или двоичного дерева вы можете искать один «выбранный» элемент, но вы не можете искать все «выбранные» элементы без проверки каждого элемента (или наличия отдельного словаря для каждой перестановки выбранных элементов). что, очевидно, нецелесообразно).
Очередь может быть полезна, если вы находитесь в сценарии, когда к вам поступает много запросов, и вы хотите убедиться, что обрабатываете их справедливо, по порядку.
Я использую стеки всякий раз, когда у меня есть рекурсивный алгоритм, что обычно означает, что он работает с некоторой иерархической структурой данных, и я хочу напечатать сообщение об ошибке, если у меня заканчивается память, вместо того, чтобы просто позволить программному сбою, если программный стек работает нет больше места. Вместо рекурсивного вызова функции я храню ее локальные переменные в объекте, запускаю цикл и поддерживаю стек этих объектов.