C++ 如何在C或C+中创建动态堆栈的动态数组+;
这是我的C类编程作业: 有一列火车开往你的终点站。列车上有N个货物,货物的标签从1到N。您必须按照从N到1的顺序将货物运出终点站(如C++ 如何在C或C+中创建动态堆栈的动态数组+;,c++,c,arrays,jagged-arrays,C++,C,Arrays,Jagged Arrays,这是我的C类编程作业: 有一列火车开往你的终点站。列车上有N个货物,货物的标签从1到N。您必须按照从N到1的顺序将货物运出终点站(如654321)1 5 3 4 2是一列进站列车的示例,该列车有5件货物 您的终端有多个导轨。这是具有5个导轨的终端的外观: 您的终端中只允许3种操作: 把你收到的货物送出码头 把你收到的货物送到终点站 把货物从火车上运出码头 示例:进站列车为1 2 3 输入:您必须接收作为火车货物的输入,例如1 2 3。输入列车的货物不超过100件 输出:显示尽可能少的rail
654321
)<代码>1 5 3 4 2是一列进站列车的示例,该列车有5件货物
您的终端有多个导轨。这是具有5个导轨的终端的外观:
您的终端中只允许3种操作:
1 2 3
输入:您必须接收作为火车货物的输入,例如1 2 3
。输入列车的货物不超过100件
输出:显示尽可能少的rails数量以完成该过程,在上图中,输出应为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()
}
for(inti=1;i您只需创建一个std::vector
并在其上循环即可。您的代码修改如下:
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();
vector railStacks;//这应该可以访问,并附加在`SendTheTrainToTheRail()之后`
对于(j=0;j
为什么一堆货物不能满足您的目的……一条铁路能储存的货物数量是否有上限???似乎您只需要一条铁路,只要它能容纳99节车厢,或者一些列车到达时车厢的顺序是否混乱?由于列车长度限制为100,应该可以使用静态或自动分配,最糟糕的情况是99节车厢(99,98……2,1100),最长的轨道需要99(1,2,…,99100)@ Jasen不会消耗太多内存,它将花费99×99英特(或者99×99短裤)。没有“C/C++”。C是C++,我从来没有见过任何好的标号“C/C++”。如果你想知道如何在C++中编码,你需要学习C++中的代码,而不是C++。当堆栈为空时调用了
?它将返回0还是只是运行正常?您是对的,在这种情况下它是UB。在调用pop
后,如果堆栈为空,您应该从railStacks
中删除堆栈。此外,j==railStacks.size()
不再是一种安全检查。您可能只想使用该信息维护一个bool
。因此,我应该创建另一个向量,其中每个元素表示每个堆栈的有效性?使用empty
成员函数。