В своей базовой форме стек допускает только медленный линейный поиск. То есть, если в стеке есть n элементов, вам нужно поискать все n (в среднем 1/2 n), чтобы найти совпадение. Если ваш стек относительно мал, этот линейный (один за другим) поиск может не иметь большого значения.
Однако, если у вас гораздо больший набор, вы можете объединить две структуры данных, чтобы сделать поиск более эффективным: например, у вас может быть хеш-таблица в дополнение к стека: Каждый раз, когда вы помещаете что-то в стек, вы также можете добавить это в хеш-таблицу. И наоборот, когда вы удаляете его из стека, вы можете удалить его из таблицы. Хеш-таблицы обеспечивают относительно быстрый поиск даже при очень больших наборах данных, поэтому поиск может быть довольно быстрым.
Одна проблема с моим предложенным решением состоит в том, как правильно обрабатывать дублирующиеся элементы: стеки могут содержать дубликаты, а хеш-таблицы обычно этого не делают. Следовательно, вам может понадобиться реализовать простой подсчет ссылок в хеш-таблице: каждый раз, когда вы всплываете, уменьшаете счет в хеш-таблице - когда счет падает до нуля, вы можете удалить его из хеша.
Другая похожая возможность заключается в использовании «мультикарты» - она похожа на хеш-таблицу, но позволит легче обрабатывать дубликаты.