Как поменять местами элементы в стеке в C#? Надо ли для этого релизовывать свой стек? Подскажите пожалуйста
Если нужно перекладывать элементы не подряд и с произвольными индексами, делаем так:
int smallerIdx = Math.Min(i, j);
int largerIdx = Math.Max(i, j);
Stack<T> aux = new Stack<T>(largerIdx);
T tmp = default;
for (int k = 0; k <= largerIdx; k++)
{
T curr = stack.Pop();
aux.Push(curr);
if (k == smallerIdx)
tmp = curr;
}
stack.Push(tmp);
tmp = aux.Pop();
for (int k = largerIdx - 1; k >= 0; k--)
{
T curr = aux.Pop();
if (k == smallerIdx)
curr = tmp;
stack.Push(curr);
}
Обратите внимание, что такой подход жутко неэффективен. Если вам нужны такие операции (доступ по индексу) в вашей программе, то стек, скорее всего, неподходящая структура данных. Но с академическими целями так делать можно.
Если такая задача у вас не единичная — предлагаю реализовать собственный стек с открытым индексатором или методом для перестановки элементов. Исходный код стандартного стека лежит здесь, возьмите его и добавьте в него следующий метод:
public void Swap(int firstIndex, int secondIndex)
{
// Проверки параметров на допустимость
...
T temp = _array[firstIndex];
_array[firstIndex] = _array[secondIndex];
_array[secondIndex] = temp;
}
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости