Это моя домашняя работа по программированию в классе 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
, Входной поезд имеет не более 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 ++, поэтому этот вопрос может показаться глупым)
Вы можете просто создать 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();