Я разработал метод, называемый «rotate» для моего класса объектов стека. Я сделал то, что если в стеке есть элементы: {0,2,3,4,5,6,7}, мне нужно было бы вращать элементы вперед и назад.Сдвиговые элементы в массиве C++
Если мне нужно повернуть вперед на 2 элемента, то мы получим {3,4,5,6,7,0,2} в массиве. И если мне нужно повернуть назад или -3 элемента, то, глядя на исходный массив, это будет {5,6,7,0,2,3,4}
Итак, метод, который я разработал работает отлично. Его просто ужасно неэффективная ИМО. Мне было интересно, могу ли я объединить массив с помощью оператора мод? Или если их бесполезный код повесился вокруг того, что я еще не понял, и так далее.
Я думаю, мой вопрос: как я могу упростить этот метод? например используя меньше код. :-)
void stack::rotate(int r)
{
int i = 0;
while (r > 0) // rotate postively.
{
front.n = items[top+1].n;
for (int j = 0; j < bottom; j++)
{
items[j] = items[j+1];
}
items[count-1].n = front.n;
r--;
}
while (r < 0) // rotate negatively.
{
if (i == top+1)
{
front.n = items[top+1].n;
items[top+1].n = items[count-1].n; // switch last with first
}
back.n = items[++i].n; // second element is the new back
items[i].n = front.n;
if (i == bottom)
{
items[count-1].n = front.n; // last is first
i = 0;
r++;
continue;
}
else
{
front.n = items[++i].n;
items[i].n = back.n;
if (i == bottom)
{
i = 0;
r++;
continue;
}
}
}
}
Как вы собираетесь это использовать? Получаете ли вы доступ к результатам по одному или хотите пройти по всему массиву? –
Это консольное приложение. Я просто распечатываю каждый элемент, по счету. – user40120
Использование связанного списка упростит работу. – Gabb0