#include #include "stack.h" using namespace std; stack *result(stack *&h) { stack *res = NULL; while (h) { stack *tmp = NULL; // Будем убирать из стека все повторения его верхнего элемента. int el = pop(h); // Так как все повторения будут убраны, можно положить // значение в стек с результатом. push(res, el); while (h) { int cur = pop(h); if (cur != el) push(tmp, cur); } // После выполнения предыдущего цикла, в стеке не осталось // значений, равных el. Обновим h и запустим на нём этот же // самый алгоритм. while (tmp) push(h, pop(tmp)); } reverse(res); return res; } int main() { int n; cout << "n = "; cin >> n; stack *head = NULL; char x; for (int i = 0; i < n; i++) { cin >> x; push(head, int(x)); } reverse(head); stack *res = result(head); while (res) cout << char(pop(res)) << " "; cout << endl; return 0; }