Как создать динамический массив динамических стеков в C или Stack Overflow

Это моя домашняя работа по программированию в классе C:

В ваш терминал прибывает поезд. Поезд имеет N грузы и грузы помечены от 1 до N. Вы должны отправить грузы из вашего терминала в порядке от N до 1 (как 6 5 4 3 2 1). 1 5 3 4 2 пример входящего поезда, который имеет 5 грузов.

Ваш терминал имеет несколько рельсов. Вот так выглядит терминал с 5 рельсами:
введите описание изображения здесь

В вашем терминале разрешено только 3 операции:

  1. Отправьте полученный вами груз из терминала.
  2. Отправьте полученный груз на конечную железную дорогу.
  3. Отправьте груз с рельса из терминала.

Пример: входящий поезд 1 2 3,

введите описание изображения здесь

ВХОД: Вы должны получить вход в качестве груза поезда, например 1 2 3, Входной поезд имеет не более 100 грузов.

ВЫХОД: покажите наименьшее количество рельсов, которые можно выполнить, на рисунке выше вывод должен быть 1,

Я думаю, что мой (псевдо) код должен выглядеть примерно так:

for(int i = 1; i <= cargoAmount;)
{
if(i == trainin.top()) //found in IN: send the cargo out
{
trainin.pop();
i++;
continue;
}
for(j = 0; j <= TotalStackCurrentlyInUse??; j++) //found in a RAIL: send the cargo out
{
if(i == rail[j].top())
{
rail[j].pop();
i++;
break;
}
}
if(j == TotalStackCurrentlyInUse) //Not found: Send the train to the rail stack
SendTheTrainToTheRail();
// I will try to write this thing later
// I have the idea that the new cargo should have the value lass than rail[j].top()
}

Теперь я думаю, что мне нужно использовать много динамических стеков в моем приложении C (каждый стек представляет каждую рейку в терминале), и я должен отслеживать количество стеков, которые использует программа. Мой друг говорит мне, что я должен забыть весь стек и просто использовать связанный список, чтобы создать 100 rail[j].head сначала, а потом будет легко. Но я просто хочу знать, как это сделать, используя стеки (если это сложно и запутанно в C, я в порядке со стеками и векторами C ++).

Вопрос: Как создать динамический массив динамических стеков в C или C ++ и как отслеживать количество используемых в настоящее время стеков (обратите внимание, что я очень новичок в C ++, поэтому этот вопрос может показаться глупым)

1

Решение

Вы можете просто создать std::vector<std::stack> и зациклите это. Ваш код изменен:

  vector<stack> railStacks;//This should be accessible and appended to by `SendTheTrainToTheRail()`
for(j = 0; j < railStacks.size() ; j++) //found in a RAIL: send the cargo out
{
if(i == railStacks[j].top())
{
railStacks[j].pop();
i++;
break;
}
}
if(j == railStacks.size()) //Not found: Send the train to the rail stack
SendTheTrainToTheRail();
1

Другие решения


По вопросам рекламы [email protected]