Обращение стека — распространенная операция в программировании, которая может быть полезна в различных сценариях. В этой статье мы рассмотрим несколько методов реверса стека в C++. Мы приведем примеры кода и обсудим плюсы и минусы каждого подхода.
Методы переворота стека:
-
Использование вспомогательного стека:
- Создайте вспомогательный стек.
- Извлечь элементы из исходного стека и поместить их во вспомогательный стек.
- Элементы во вспомогательном стеке будут перевернуты.
- Извлеките элементы из вспомогательного стека и поместите их обратно в исходный стек.
void reverseStack(stack<int>& originalStack) { stack<int> auxiliaryStack; while (!originalStack.empty()) { auxiliaryStack.push(originalStack.top()); originalStack.pop(); } while (!auxiliaryStack.empty()) { originalStack.push(auxiliaryStack.top()); auxiliaryStack.pop(); } } -
Использование рекурсии:
- Извлечь верхний элемент из стека.
- Рекурсивно перевернуть оставшийся стек.
- Вставьте выдвинутый элемент внизу перевернутой стопки.
void insertAtBottom(stack<int>& st, int element) { if (st.empty()) { st.push(element); return; } int temp = st.top(); st.pop(); insertAtBottom(st, element); st.push(temp); } void reverseStack(stack<int>& st) { if (!st.empty()) { int top = st.top(); st.pop(); reverseStack(st); insertAtBottom(st, top); } } -
Использование вектора:
- Преобразуйте стек в вектор.
- Переверните вектор, используя функцию
reverse()из библиотеки. - Очистить исходную стопку.
- Поместите элементы из перевернутого вектора обратно в стек.
void reverseStack(stack<int>& originalStack) { vector<int> tempVector; while (!originalStack.empty()) { tempVector.push_back(originalStack.top()); originalStack.pop(); } reverse(tempVector.begin(), tempVector.end()); for (int element : tempVector) { originalStack.push(element); } }