这是我的C类编程作业:
有一列火车进入您的航站楼。火车有 N 货物,货物从1到 N 标记。您必须按照从 N 到1(如
6 5 4 3 2 1
)的顺序将货物从您的终端发送出去。1 5 3 4 2
是有5个货物的进来火车的一个例子。您的终端有多个rails。这就是具有5个rails的终端的样子:
您的终端只允许进行3次操作:
- 将您收到的货物寄出终端。
- 将收到的货物发送到终端导轨。
- 将货物从铁路运出终端。
醇>示例:来电列车为
1 2 3
。
输入:您必须接收输入作为列车的货物,例如
1 2 3
。输入列车的货物不超过100件。输出:显示可执行此过程的最少轨道量,如上图所示,输出应为
1
。
我认为我的(psudo)代码应该类似于:
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 ++很新,所以这个问题可能看起来很愚蠢)< / p>
答案 0 :(得分: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();