Разбор стека. Удаление повторов
Подскажите пожалуйста, как имея стек (самописный) получить из него новый, без повторяющихся элементов? Можно использовать, естественно, вспомогательные стеки. На ум приходит только модификация ханойской башни и всё.
Подскажите пожалуйста, как имея стек (самописный) получить из него новый, без повторяющихся элементов? Можно использовать, естественно, вспомогательные стеки. На ум приходит только модификация ханойской башни и всё.
В случае, когда дополнительными структурами данных (кроме одного дополнительного стека) пользоваться нельзя, подойдёт следующая идея. Назовём просмотром с удалением такую операцию:
Тогда делаем так: проводим просмотр с удалением элементов после 1-го, равных этому самому первому. Затем то же для второго элемента и т. д., до конца стека. Это медленно, но ведёт к цели, т. к. после i
-ого просмотра первые i
элементов стека уникальны.
Если одинаковые элементы в стеке лежат рядом, то задача решается элементарно
Если одинаковые элементы лежат не рядом, то нужно сначала нужно стек отсортировать. Для этого можно воспользоваться алгоритмом сортировки, который работает только при сравнении двух рядом лежащих переменных (потому что мы можем получить их, два раза сделав pop). Например, сортировка пузырьком удовлетворяет таким требованиям. Результат сортировки соответственно записываем в другой стек на каждой итерации