如何在C或C ++中创建动态堆栈的动态数组

时间:2014-12-14 08:14:40

标签: c++ c arrays jagged-arrays

这是我的C类编程作业:

  

有一列火车进入您的航站楼。火车有 N 货物,货物从1到 N 标记。您必须按照从 N 到1(如6 5 4 3 2 1)的顺序将货物从您的终端发送出去。 1 5 3 4 2是有5个货物的进来火车的一个例子。

     

您的终端有多个rails。这就是具有5个rails的终端的样子:   enter image description here

     

您的终端只允许进行3次操作:

     
      
  1. 将您收到的货物寄出终端。
  2.   
  3. 将收到的货物发送到终端导轨。
  4.   
  5. 将货物从铁路运出终端。
  6.         

    示例:来电列车为1 2 3

         

    enter image description here

         

    输入:您必须接收输入作为列车的货物,例如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>

1 个答案:

答案 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();